|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 t9 H) v% X/ T q9 f
#include <linux/init.h>9 r, t5 I. D( F
#include <linux/module.h>7 ]. J7 y. u0 U: W( {
#include <linux/kernel.h>8 {# r! N& K5 k- y+ k5 D
#include <linux/types.h>
6 `/ N- N; {7 z7 ]" p#include <linux/gpio.h>8 x0 o9 ^3 ]( {( o, o
#include <linux/leds.h>5 H% z! W: B, _$ `9 v
#include <linux/platform_device.h>! |6 v. R6 P. v
' P6 F& r9 G+ d% X0 E) V% @#include <asm/mach-types.h>7 Z/ g. H, `& Y; D4 F1 ~% Y( p! O" ^
#include <asm/mach/arch.h>9 F% {+ V$ |& R
#include <mach/da8xx.h>2 ^9 A. J7 s- z2 ^4 B
#include <mach/mux.h>) ~5 s2 K* \1 q! r
' G, r. R( I' |1 D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# X, @8 H- i5 M6 q6 s# |& Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% G& ]( m5 c- H+ a$ l }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 V7 E9 ?3 }4 f% g, Y6 y" \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 D t* T6 C) s( v
- }! g. j9 O$ X% q/* assign the tl som board LED-GPIOs*/
3 X$ [3 ]: b4 o. O+ l7 {static const short da850_evm_tl_user_led_pins[] = {1 B# Y" P7 M- r/ {9 `) l5 z
/* These pins are definition at <mach/mux.h> file */# B, }; j7 a5 ?# k7 \* M
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," U- A9 n$ F# f* s/ g
-15 \7 E5 `; `! S9 J( C u8 W/ X
};8 J+ G h2 e7 n9 O
9 q$ v/ B! i0 p+ e& L+ p' ?: B
static struct gpio_led da850_evm_tl_leds[] = {
& a0 M2 g; p5 j& z! t) I {3 a8 t% u: K! Z& k" H1 p
.active_low = 0,
# o. u1 E3 s& ?1 j9 ^" f .gpio = DA850_USER_LED0,1 z& F5 K- C. U+ ]# D
.name = "user_led0",# [+ M$ W" U8 s }* }0 }
.default_trigger = "default-on",
8 o, r/ |4 u' k2 \" v2 q. w% ?, F },
& [+ A4 }- O2 m3 r/ d; y9 E {* I! x* ?. {1 Y3 g
.active_low = 0,4 N3 w/ `8 ~1 D! x. |
.gpio = DA850_USER_LED1,
/ E: E5 I$ q6 u% o0 M; a .name = "user_led1",
+ i8 A6 `% W( I6 a- ?4 t% V .default_trigger = "default-on",
9 U; g* b8 ~% d" ]) i; v },8 l# R g7 O* D ?! V; t
{: `" p/ r( u& Y8 H2 N$ j3 T3 V
.active_low = 0,
3 R) s7 i- ^ |9 c! d- w1 [6 B .gpio = DA850_USER_LED2,( n: [5 {! s. d6 K" G4 ]
.name = "user_led2",( N& l9 N6 T, s
.default_trigger = "default-on",, W. L( L5 V6 [4 T; G
},
' z: U5 n$ V3 F, N. O3 J$ G {; ~. S( d5 k0 J3 P
.active_low = 0,5 ]% U# T- z ~9 @2 ?; ~+ I" I
.gpio = DA850_USER_LED3,
6 r$ l& U- o, q2 T6 I; |. M, Y; D* d .name = "user_led3",
/ J# R- `3 T1 m" D( |" M .default_trigger = "default-on",3 \4 c; u, o# x R# c r
},) Q" L9 b9 T$ L7 b7 Z+ U5 }% C
};
) i0 E/ d \' b% k% Y% F _" R5 r
/ [& J: X7 c, O1 \- L, A8 ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 c/ x5 O: T- x+ A7 l3 v .leds = da850_evm_tl_leds,2 N: O3 S9 s7 E
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& w# [* j; [2 a# m5 R1 v4 {};
# A) N# n2 _" g/ v- Q
) g7 G0 Z3 |9 i+ pstatic void led_dev_release(struct device *dev)
1 M9 b1 j& U- B9 [ H{0 u) R1 A! X# w( R* P1 }1 m* F4 f
};' Z! |! ]4 k i
0 q% \% ^: r( \0 W$ F4 m% Bstatic struct platform_device da850_evm_tl_leds_device = {
5 {% D+ ?: d7 y8 t+ ?. E .name = "leds-gpio",
& _1 j( Y( u, o: c .id = 1,, x h# Q' ?$ w
.dev = {0 @: @+ |7 s `" m
.platform_data = &da850_evm_tl_leds_pdata,
( Y Y; i% T; B3 v% [! K .release = led_dev_release,
8 Y0 S, {9 g; I- y! o }
7 D. r1 ^; ?( L# \};# L& W* r4 v, C6 }4 Q
: N8 Q) M. i4 u" S; v
static int __init led_platform_init(void)3 T! h' z( d4 _
{
& F0 ]1 s/ Q& [( n& P |4 B int ret;
1 Q4 f. E- K% U8 t5 l#if 0* K3 h: X; j& q- z$ e% N4 \, [! }, r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 A" ?' H3 F8 L, c4 ] if (ret)
9 Z: `9 p; K5 [; Z* ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% z9 i1 }8 o! b. \* f/ ^
"%d\n", ret);4 P; Y; v7 T" C. o' l
#endif. n% w* R( \3 Z' `5 W
ret = platform_device_register(&da850_evm_tl_leds_device);
], g% ^( v6 L0 _, M if (ret)' G$ G p3 `* X- O. b
pr_warning("Could not register som GPIO expander LEDS");
2 Y1 j3 {4 f* y else
$ }( T7 Y5 L0 b/ T! ]& W printk(KERN_INFO "LED register sucessful!\n");7 r# @' _/ o7 w9 ?/ ^ ]
2 A6 j, H6 ^9 v return ret;
0 i7 U3 S5 k, R3 |}
! N' D: n% L& P; S# V$ X. F
0 i- a2 R2 x) v! estatic void __exit led_platform_exit(void)
* n# \% m, T4 p8 j8 a9 c{- k6 i: `3 {5 I Z+ H
platform_device_unregister(&da850_evm_tl_leds_device);( P3 y: U& ]' b7 t$ l2 }
' }6 E) E* g V+ R R printk(KERN_INFO "LED unregister!\n");
+ |- l1 d9 i! {! u* H" l- ?* O}
" h% P! @, j* O! h- I9 q7 m$ `# @7 T! F/ g' r
module_init(led_platform_init);
' @% Q) L! F; o+ Dmodule_exit(led_platform_exit);$ c5 y8 q$ G( `& |
* h/ \: ` G, u% g+ Z$ }7 `/ NMODULE_DESCRIPTION("Led platform driver");
2 |4 n% ~+ E5 |; h- @3 r" q8 \' fMODULE_AUTHOR("Tronlong");2 \9 P0 }# L4 T, |0 S9 a; h1 j
MODULE_LICENSE("GPL");
3 ]+ Y! D( x: M+ r1 L+ ]3 T; B% D3 W& B) y4 l: |
|
|