|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ T- _: v7 x8 b6 I0 O#include <linux/init.h>
+ @" k- P' X; j, t* P#include <linux/module.h>* o3 f- n+ U) A2 x* \& B
#include <linux/kernel.h>0 a5 |; _$ y. P( A r& a6 G, b
#include <linux/types.h>0 }; y& F4 `' M" a9 f; D
#include <linux/gpio.h>
, b3 C" T' E! q' f; |: `$ C#include <linux/leds.h>( `. q2 i4 ^' C1 V
#include <linux/platform_device.h>
) X" s8 @( |# Z) n7 c
- H" S# ]: k- p; R) u- {#include <asm/mach-types.h>
( N' T1 X. y5 C: E e1 D#include <asm/mach/arch.h>
3 M( f: _0 r! ~6 D#include <mach/da8xx.h>
" _6 C# H2 r ~8 r#include <mach/mux.h>3 P0 A2 \5 c8 f! P( o* Y
w8 u& Q" s. l' c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 t% m' R7 u5 X5 K* c#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 x/ P$ b% q; o9 o2 G# H( U#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). T6 S+ j$ r3 b. w9 p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& q1 G: j4 q- Q# G$ W
# o; M& M/ i- V
/* assign the tl som board LED-GPIOs*/
8 ^2 F9 L$ o0 [4 U& X' P- }static const short da850_evm_tl_user_led_pins[] = {7 J! \. M: ~/ d0 P6 C5 t
/* These pins are definition at <mach/mux.h> file */
2 z O% F# R$ T& _ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 M7 }8 h# T% N' q9 b I
-1+ {# B" _' D* v% l% e. O9 S
};
" J0 e/ l% v/ d% v7 j0 {2 ?5 i! F4 J, t2 R) ?# C5 C
static struct gpio_led da850_evm_tl_leds[] = {4 F9 R6 C% K. \8 N
{5 J' C! h( ]1 v( k
.active_low = 0,. k: e b& g( N4 n
.gpio = DA850_USER_LED0,
+ `: z0 h' K- e/ M7 G( ~, Q .name = "user_led0",
1 W" R* c" R3 Y .default_trigger = "default-on",5 ~5 o9 ~) D# N8 Q7 T6 u
},! {' L) f. ], f' Q- e
{
! b: v& D$ z) B* y' | .active_low = 0,
: N! ?) C! V; q .gpio = DA850_USER_LED1,
8 j: B; h- `" A2 a8 R .name = "user_led1",
! Y6 h5 S* o6 A, [; A .default_trigger = "default-on",: W" y! m; E3 |% H, `3 I
}," o6 P/ e+ N5 g, u4 ^2 y
{2 F0 r. g( Z; B" G' W
.active_low = 0,
, ~2 {7 S' [2 ` .gpio = DA850_USER_LED2,$ v M% @4 x a) m. |
.name = "user_led2",
& V0 e. ^5 L6 ]; H8 ?* B) I2 Q .default_trigger = "default-on",
! B) H0 |. H# I4 U/ y( n! j% `) G },% r5 @. R& [; r, B1 n# u: f6 C5 x
{
9 F# B% \; G d8 }* s .active_low = 0,. G$ N& Z2 p8 }
.gpio = DA850_USER_LED3,3 `& m3 h; E+ y1 s" a `. y
.name = "user_led3",' ~8 r3 ?: }0 X+ V/ [5 m# {: [4 l
.default_trigger = "default-on",
0 e6 H$ p/ g* U },7 J% c4 ^9 r: W* V' ]( g
};
% J: ~+ D7 G, a# X! r' D/ j( }: Z% i
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% {8 Y3 i( d- E
.leds = da850_evm_tl_leds,
# ? y6 w) v* F4 o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 i4 u5 p" o8 y, r& Q3 ]. R};
( \' H3 c t, @8 G+ V1 |0 a$ y' g9 m' ?, f" h
static void led_dev_release(struct device *dev)' r. w) E, y0 B- w1 H! g& s
{7 i1 ]. Y0 B9 o" P
};2 S/ T7 V. c/ n$ {/ b
( Z4 W1 v0 K$ p$ X3 j& ostatic struct platform_device da850_evm_tl_leds_device = {1 d1 D/ e- O8 K- ?
.name = "leds-gpio",( }; c V% R* b- h4 F+ O. k# u2 k
.id = 1,0 \* ]2 j+ E) ~0 h; T/ R
.dev = {
' g9 m1 v7 p/ g* v" R; Q8 d .platform_data = &da850_evm_tl_leds_pdata,
0 U" {: @3 L* T6 W8 s1 m, H1 \ .release = led_dev_release,
* P! F+ Z5 s6 C' H9 t! l }$ N5 c2 b T1 `) P1 G
};) E! b* s h9 @5 k/ W8 N, u* Z
! l& C( Q' t1 h7 o# ^- ~" L
static int __init led_platform_init(void)
P9 @/ W9 _: `{: J" d, ?6 c6 u6 F0 j
int ret;
6 D- ]3 v+ T* O' j C v#if 0# R- L( g& c G! ?9 ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 n% H, `% d+ o, T/ R2 z3 b if (ret)
3 H- W5 O* H2 y+ j: n' f. a6 n pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" H' t1 ?% i* x( C+ ` "%d\n", ret);
% S. w& D. X/ }: K' }+ |1 x3 v* I#endif
2 K! t$ K# r) S: g( i7 l ret = platform_device_register(&da850_evm_tl_leds_device);) m$ u2 I9 Q8 o1 ~" H# z
if (ret)
1 r8 [+ U) m/ @7 x6 Z pr_warning("Could not register som GPIO expander LEDS");- j2 p' w: b5 U1 K0 }
else
4 s; u$ |: y. [9 J printk(KERN_INFO "LED register sucessful!\n");/ e6 i/ U: L, u. U# ?% T+ l
4 n! ?8 n9 [$ I- ]/ B# Y
return ret;, j3 s/ T+ z8 ^& S
}
8 Y% Q& `" B9 f* p% V9 X* ?4 A/ }: o% C- v' ]; O
static void __exit led_platform_exit(void)
. ]9 G: f5 d* P{
, F5 X5 o P% l0 F( T( m9 `5 P: p0 P platform_device_unregister(&da850_evm_tl_leds_device);
' a" b) K' \/ @, F
: C0 ?' x' v( n0 N printk(KERN_INFO "LED unregister!\n");
, Q+ m5 t$ b4 S* `/ i' C}
9 F5 d+ O8 `* K8 i1 B3 x6 a
. ` ~! z' i5 m5 l; _module_init(led_platform_init);& p4 s3 \% R( B# q2 T
module_exit(led_platform_exit);6 o( z4 Q5 C: k% |
! H# b+ m: ^: R* T
MODULE_DESCRIPTION("Led platform driver");/ J2 y3 Z( z: e* l
MODULE_AUTHOR("Tronlong");
1 Q6 f! K& J; a$ L9 lMODULE_LICENSE("GPL");
( v5 W) N/ O* N& l3 N8 [4 S( X9 E1 e9 ?2 j% m* _6 d6 ^
|
|