|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ ?; L1 ?5 @: ]2 C! |5 e( q#include <linux/init.h>% c5 W1 e: E' I1 F+ W
#include <linux/module.h>4 }& x% A: y' w9 W X$ _, R
#include <linux/kernel.h>& C+ y: Q/ n/ Z. J/ J. v. v
#include <linux/types.h>
, a" L! F6 h5 Y6 [, |! }3 ]#include <linux/gpio.h>
f x7 y" J5 p- I7 p+ l0 M8 k1 I#include <linux/leds.h>8 [. Q' K# M/ W- X/ M( i* C
#include <linux/platform_device.h>
: ?: V8 J& e4 `0 U! ?+ I
- }9 a/ W1 ]2 h1 f( S' @: }#include <asm/mach-types.h>
: b1 c* L2 a! k1 x#include <asm/mach/arch.h>: o1 v- ]; f4 u* s; z
#include <mach/da8xx.h>) I& V- V4 ?2 h% O/ \3 O6 V
#include <mach/mux.h> ?0 t, R. v+ }2 H: {' g# o
7 h0 e( q( K- }$ k#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ I% Q0 m. S' L0 E5 w0 H. ~; F- H
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 O" { _/ ~0 |( D7 d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 ?" u9 |: ^3 i1 {& k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 G" M% C4 U: ?0 {! L% l' ?
9 F4 ~7 C/ D# x: c4 i+ O, U/* assign the tl som board LED-GPIOs*/& ~/ i% x7 S/ G( U
static const short da850_evm_tl_user_led_pins[] = {# l9 U, V( B* A% v
/* These pins are definition at <mach/mux.h> file */
A! I( c, p, c7 L( } DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 `7 Q8 Q7 l' J Y2 J, m -1 E% `& E/ z$ R1 a6 V
};
0 E/ o7 w4 S# g( M4 m$ s, L, m, J3 r3 R( `, Q) T
static struct gpio_led da850_evm_tl_leds[] = {
" Q- s; e, T2 ?3 \" L- A {
# q; e: e9 ]$ ` .active_low = 0,
; L4 K. q1 L2 t& c7 n9 y& q; d .gpio = DA850_USER_LED0,% E; B( I% t# z5 ~
.name = "user_led0",9 j/ a1 w$ p6 [+ T; }7 l
.default_trigger = "default-on",+ s1 C: }& U4 T( G5 U8 I+ K
},; M/ U2 k. ]. J( J
{
. q7 A# x6 _& D; V/ J .active_low = 0,7 q( W! @: w G; i
.gpio = DA850_USER_LED1,
$ \1 Q" c- }5 G7 X1 `$ J4 `6 [+ L .name = "user_led1",1 ~! N7 K# G" {& l
.default_trigger = "default-on",
8 {, T8 d1 q$ B$ G },
& [& T! V4 a: } U {
" J7 m5 O. ?. D" u8 a .active_low = 0,
# x: j, U/ @* t6 M, _( e; @+ ^' B9 [ .gpio = DA850_USER_LED2,
7 l( w9 k T# o; s8 W .name = "user_led2",4 y* x% X m$ I& B# ]6 R# Q
.default_trigger = "default-on",
3 I# a; w9 N. t& p },
; \* y( I5 X2 f5 \) t {
: M5 r' K0 O6 E: `7 `* S8 n, [7 O; K0 @ .active_low = 0,
1 @9 u( ^8 u! I+ v .gpio = DA850_USER_LED3,
, O! z" _: j4 {; g/ i .name = "user_led3",
0 b: o& p3 a5 D3 k' d+ @( j .default_trigger = "default-on",
$ Y, j2 X+ S+ D/ n5 H },
" S' a; c, m8 m) r; B}; e( P, ?( V' H# V8 l' `
. ]5 L4 E. m$ _: _" U/ Y) q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% u+ e9 w+ W- W" T- [9 Z' }6 q6 Z .leds = da850_evm_tl_leds,
/ z: Q8 ?- P3 m8 @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),, N/ O5 O; ^8 F6 W" J _6 A3 h) b5 r
};
: E8 g3 ]! p; C5 p( u" d7 _; v7 P2 f8 V5 z
static void led_dev_release(struct device *dev)" H& Z7 w9 b% ^" B
{
& r3 w) m1 O/ \8 [ A+ _7 K9 V};9 q- ]/ j, [ i: \, |. r$ T7 `
$ J) }: o& x( K+ ]6 i- @4 q
static struct platform_device da850_evm_tl_leds_device = {7 k9 P1 b" J4 ^! F. O$ O# h9 N
.name = "leds-gpio",7 i0 k2 @& `/ X4 `
.id = 1,8 g0 x) Z0 ]+ Q5 i4 T: y
.dev = {
* F2 @$ \. ?. d( ], ]8 K5 s+ ]# L .platform_data = &da850_evm_tl_leds_pdata,
* ]( i( W7 p/ D2 F3 @4 m .release = led_dev_release,
9 ]' q1 B J' E) W* n9 Y% r }
a' N0 y; x3 i% m, {+ k R& Y};7 \, J% W- R" S
0 x. Q, t' D! J. h1 v4 mstatic int __init led_platform_init(void)/ ?8 R. p- j% e# u: |! F. j ^
{
3 u4 _0 }. b) h. O int ret; k# S( I! b3 y+ s; H
#if 0+ R* m2 @) a( i4 i! e8 F8 \- _
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
I* c( j% o3 u9 n- ] if (ret)" L" g/ X( }4 b8 N; T9 n, z3 }' L6 n- I
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! M5 n2 `+ u3 L" G( @" V$ l
"%d\n", ret);
5 b! _% `) y7 V9 k/ F& ^8 J#endif. `3 p9 |# J* Q% `
ret = platform_device_register(&da850_evm_tl_leds_device);) D7 f! w" b& j3 I& }* N. B6 \! `
if (ret)3 U8 p0 A! E( M5 y* Y q) D S
pr_warning("Could not register som GPIO expander LEDS");6 ]1 G1 a% E i. v1 Z$ T! \8 D" |
else3 j, q& |, `1 _1 a
printk(KERN_INFO "LED register sucessful!\n");6 h; @% H8 e% a
3 y, r4 q' _, m
return ret;
1 G4 W/ t" [5 I/ l$ |}
2 b; z9 Y7 U3 u+ @. {5 s w0 X6 o. E- w' z
static void __exit led_platform_exit(void)! U: h+ l# O6 ]0 }. N K `4 N
{
* A3 F; a1 L: e8 T5 ?: [ platform_device_unregister(&da850_evm_tl_leds_device);
5 m2 e j' m0 \. K m/ N( k
& V7 g7 v/ x0 I7 |% q* X9 v printk(KERN_INFO "LED unregister!\n");& C. k3 ^+ c5 O7 m; D9 S
}
# ]4 d$ B8 W' R* X( C5 u! a8 x6 R5 c2 n6 |
module_init(led_platform_init);& C9 q6 d6 z# ] {. N! k
module_exit(led_platform_exit);! W6 F$ m& L' [/ v! i! U
5 @' R4 K0 a$ O a. h( R/ |7 BMODULE_DESCRIPTION("Led platform driver");
; p; J7 v6 C8 |% zMODULE_AUTHOR("Tronlong");
! ?, H3 v% p w& g& w& BMODULE_LICENSE("GPL");0 G6 M' A6 K1 V& e; ^7 Q; ]
1 r" q' Y% R, u8 P% |% \7 [ |
|