|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; H# i0 V L/ w2 p M% Q5 Z#include <linux/init.h>
3 e, R# ] b6 V, ^1 q0 ]#include <linux/module.h>' {: c N$ E. F2 D
#include <linux/kernel.h>
# T7 S% t8 ], j#include <linux/types.h>9 H$ T4 I7 K4 B7 X
#include <linux/gpio.h>
" ?9 @& }2 T- v; ~, y1 f; y5 Q#include <linux/leds.h>- L* q! y4 D* H6 c; a
#include <linux/platform_device.h>6 x1 C8 `# U& m! P! l- X4 B
G2 A3 R! ]( v
#include <asm/mach-types.h>; Q5 R& ]0 A/ e' |: s, s I5 t, B. Y
#include <asm/mach/arch.h>) D1 u6 x7 i/ m
#include <mach/da8xx.h>
6 B/ i: c |7 z5 G3 Q" s8 c+ g3 W* D: J; x#include <mach/mux.h>
7 n H8 u: F% a4 ]1 h2 R! T4 g, q; \7 L0 d0 u" W: g: V& ]4 Z) Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" e$ ~8 L% X9 }4 a#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 W2 n$ x, H3 o( P$ [! |#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- ?9 c% W$ K8 l9 c( S5 f
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 a* Y1 y( X j! ^# L3 Z6 c
3 ^9 L. n0 `. E7 ]- t5 d- C/* assign the tl som board LED-GPIOs*/
- D' [. {+ j: _5 istatic const short da850_evm_tl_user_led_pins[] = {
0 C# \: `3 q; \$ x" L /* These pins are definition at <mach/mux.h> file */
6 H$ c) \7 o, s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) I; h4 h( W+ k* z% ]1 }
-1 @ x2 s c, E; h/ C
};
0 a8 d! @7 {! c' l
. t3 J3 L5 V& O. D! Ostatic struct gpio_led da850_evm_tl_leds[] = {0 S, e- H6 H. D, g: }! r
{
, c9 \- K( W# D' @ O .active_low = 0,
" b& _: F1 ^9 H% Z .gpio = DA850_USER_LED0,0 S" v; ~, h/ F& v
.name = "user_led0",
, g5 p7 @/ B/ e! |4 l& k .default_trigger = "default-on",
8 i0 d, q1 ]/ O& I1 d },0 p$ u/ Y" c; }$ X5 G3 U
{5 s9 ~0 m4 e% N& r4 w. Y
.active_low = 0,/ O& f1 {$ N; e. d% B q+ x
.gpio = DA850_USER_LED1,
7 G) r! q" z" M7 w .name = "user_led1",+ {1 |; I7 Q2 F" I: G- U0 h9 ]
.default_trigger = "default-on",9 f5 D! i6 t; O* Z
},
: J# [0 G) y0 v/ [/ {8 O ?/ o {9 W) Z/ H1 m* |8 f
.active_low = 0,
8 V# O# f8 U& }: N5 z .gpio = DA850_USER_LED2,
- u6 a/ P. L( z8 p7 Z .name = "user_led2",4 Z1 y `" Q* U! t
.default_trigger = "default-on",1 [+ `" W+ i) m
},
5 b# W! D9 T: G( c. g {% h; T; T& b9 e
.active_low = 0,
1 }2 T9 A w! S6 W .gpio = DA850_USER_LED3,
4 I" s* _0 i) M! q5 J .name = "user_led3",
& `1 c1 }$ o' w5 g' W" {2 ^7 e/ V .default_trigger = "default-on",+ H" k) h7 w( R% w4 J$ @5 t3 ^2 H
},2 m7 @8 I; c: F8 K
};
1 H* ^% g8 M) ^" P1 G4 U9 D, [
3 f. _+ Q; o" ^ |! }- o4 Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 ]' S. n6 f- t3 c* u* ~. R. v
.leds = da850_evm_tl_leds,9 U0 g/ \8 u( u# @, t3 \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. Y8 S2 p! J U5 ]: S% A. `};
3 d% ^1 Z j- J) _- \
, F' o* ?4 \2 v3 Tstatic void led_dev_release(struct device *dev)
/ l0 o [# P* {{
, @$ P% O$ \/ Z& _7 I9 g0 C7 C};0 i6 H. [! \/ e9 K
* I \" m! m4 I. istatic struct platform_device da850_evm_tl_leds_device = {
- _& P/ l, i! E" V .name = "leds-gpio",) q0 Q& I2 N8 l# P# I
.id = 1,$ d$ [& @/ f/ P: H( i
.dev = {4 J' l- h+ ~; f5 v! R& E2 l- }
.platform_data = &da850_evm_tl_leds_pdata,
7 L4 L' z7 w5 j% g) ~* I+ Q% Y0 a .release = led_dev_release,
$ h- d" t9 E3 y }
/ y0 L+ b: |: T5 u$ s: x/ z};% Y5 O2 ]4 ~0 @
0 Y1 D( f# @6 }$ n6 k
static int __init led_platform_init(void)
, x3 A, T B& a u3 z4 X$ l{6 V0 O; Q* H: D6 q$ y
int ret;3 C5 _; b/ P8 L+ v
#if 0
- B0 H! w3 }7 p9 y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 m: z3 @9 Y u0 S5 H/ e if (ret)
8 w' g0 D9 Y: S pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% ?3 X9 Z% r! W4 s( L" N9 z8 \; l "%d\n", ret);! F+ W+ l( ?7 I9 K/ y
#endif( s; i2 c4 ?6 ~: ~; c
ret = platform_device_register(&da850_evm_tl_leds_device);
, x$ H5 I2 K3 Z if (ret)9 r+ v$ F! N6 `3 _& ~8 F1 P% f/ `
pr_warning("Could not register som GPIO expander LEDS");3 B* U' Z2 C8 v
else
6 R7 Q5 g+ C$ V5 ]) ^5 S printk(KERN_INFO "LED register sucessful!\n");5 i1 M8 N% r4 L9 v9 `7 o7 m4 _
1 q* Q2 f4 o- n/ `+ {9 Z U' k- q g return ret;+ x- c2 F+ \, u$ b* Z9 ?- U, B
}
7 D, h7 n8 Z) y' `+ H+ _
( `7 |7 Z# k f8 Y( [. T" c2 S ], _7 Cstatic void __exit led_platform_exit(void)
: r* M1 X0 A" X' k' h{# [4 \" R# V; b1 U* ]
platform_device_unregister(&da850_evm_tl_leds_device);+ f/ q9 X9 K5 v- C, @9 `" k
& v, a+ W2 I& Z" L9 E
printk(KERN_INFO "LED unregister!\n");
* d3 i- Y9 V9 ]: A1 m}
! T. l+ J1 U8 A4 j6 ] `, B
0 Y4 H7 i \9 ]& x$ p6 _: Nmodule_init(led_platform_init);
+ p$ {3 o5 ^9 K# zmodule_exit(led_platform_exit);
& u$ O9 i+ j1 }$ j r- ^9 o. g
7 t! e6 A4 N5 C1 C* o# @MODULE_DESCRIPTION("Led platform driver");7 G$ x w5 A# m* [( w& Z! H
MODULE_AUTHOR("Tronlong");
E( ]4 S! i* d- B" n1 sMODULE_LICENSE("GPL");! L# H4 O: w2 y4 \! Z" H' n( {
# c; h3 ~2 Q5 b+ {1 K |
|