|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. m) G4 X7 V* u" Z2 u: d. @- F#include <linux/init.h>
* M# D+ o7 N: Z#include <linux/module.h>
6 C3 n, n4 g8 a. Q#include <linux/kernel.h>
2 k4 | }+ ?! {: Z1 [#include <linux/types.h>6 O, r; c. S( a" Z+ Z/ x; ~1 l
#include <linux/gpio.h>2 `1 e; m W, D4 a" T6 z
#include <linux/leds.h>
) `. Q0 B0 d2 F#include <linux/platform_device.h>
4 W- o3 J3 S6 e! d- Y5 _2 T- ~% }
: V+ Y5 @( H; y" @6 h% z#include <asm/mach-types.h>
$ j5 X' ] V% q: S#include <asm/mach/arch.h>- h. i/ a, u! ]1 Z' [
#include <mach/da8xx.h>
6 }8 I1 x/ v- t, I#include <mach/mux.h>% d5 Q& ?5 T( }) X
' O' u5 S* ]: N) E#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 [% f: G* p. M
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( x/ _$ h4 I* E' ~- v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 N1 W% G0 l. D* {) i1 R6 o#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 d% `* ]. Q+ A! f
- }8 [2 ?2 h' `, f! I/* assign the tl som board LED-GPIOs*/
) I% K- c5 b# N% u$ h1 Zstatic const short da850_evm_tl_user_led_pins[] = {7 H5 G' Y2 y' \0 ?0 d& o$ W
/* These pins are definition at <mach/mux.h> file */
4 b" Y0 F: q Q! w" A0 B# b DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* q( ~5 {+ J* w0 q, H1 ~7 X" }$ M, o -19 M) }1 M: s9 C9 X
};
' @5 T! n9 v* C! Q0 `& E3 O: Y. [ @
9 L7 G- |& W9 d' Qstatic struct gpio_led da850_evm_tl_leds[] = {! P! u9 T4 P0 h) c, {* J- A! C/ L
{
+ j4 W- s3 G! k8 x .active_low = 0,
: N$ r- W G" R3 O; ]3 Y .gpio = DA850_USER_LED0,
% P1 V2 O2 ?' Z% T- n .name = "user_led0",
) O3 [' v' x2 V2 S0 F- A .default_trigger = "default-on",
( u& f M4 O: G- _, L8 U- x },
; Z1 M/ S4 \. x: J& K* @( A5 }+ M# O {
7 T) B0 }- H& I0 K .active_low = 0,, C" C P, I% f
.gpio = DA850_USER_LED1,0 E; `( y9 p: F
.name = "user_led1",
; j3 R9 S. w( Q .default_trigger = "default-on",
7 n8 k3 i0 C6 I5 t2 n },
1 Z: o9 b; z; Y4 A2 H {0 a0 m& c9 m( |
.active_low = 0,' S, D+ G: V% r$ j; L
.gpio = DA850_USER_LED2,
, D( T7 [: w8 p& V' e; z# { .name = "user_led2",# e0 V' j3 t' K6 j5 w2 h
.default_trigger = "default-on",
: {7 d- Z# V5 _6 Q2 K8 ?( u' t },
' r+ R5 ^0 O6 S4 Q& i4 c {
& t" h p. [2 z( T( {6 x# K& F .active_low = 0,0 y4 {0 s$ L. c& p2 g u
.gpio = DA850_USER_LED3,/ F: |1 F+ Z. @3 x# U7 S5 \+ A9 R- u+ Y
.name = "user_led3",
: U% Z8 G, Y5 W) Y .default_trigger = "default-on",
" C4 [* h1 {2 g8 J1 R/ Y8 z- G },- L$ {- n3 \7 Q( O3 ]( a* Y! S
};1 t7 B6 F5 r6 X) T
" I# s8 E3 `' P; e) `) qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ J) q8 _! l" c+ i* | .leds = da850_evm_tl_leds,
0 p: M& c' y: u# r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 g3 E/ v% |9 m# I9 m% _7 \
};
# W% H% L; g5 ], N' c6 R
3 l d8 m& r3 pstatic void led_dev_release(struct device *dev)
Y! d5 P% d3 p* v{. v8 f5 U- f4 h/ t# ?1 s! a0 l" J
};/ [% P2 ~" x. F; O% ]' F" F
7 A* t7 }* B7 Y6 e$ ustatic struct platform_device da850_evm_tl_leds_device = {
) S# [# p# o( I! p" `( I .name = "leds-gpio",
' `* c, Q k( T$ Z/ k0 q6 o' t .id = 1,
( m: E' g' x( x* O .dev = {* P5 Y$ l1 H2 C# y
.platform_data = &da850_evm_tl_leds_pdata,
! h2 X( F6 }$ J9 y" f3 _4 H .release = led_dev_release,
) _) w, R" i4 ~6 K9 ] }$ o# J( k y' X
};
- L9 ?( T. W4 k" M4 ?
( d+ A* r( N8 h2 ]4 n2 Jstatic int __init led_platform_init(void)
( H- ^" T c, N& F. }( _" {{% `/ b2 }: o- u, B: s
int ret;
6 y& I1 o2 E' P#if 0
9 z" O+ n; Y, X% Y* J) I } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' Q+ m* P \3 {. Y$ o' X if (ret), T. i+ a/ p2 d% H
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 j( x3 T o9 W a" x5 C" @: T "%d\n", ret);( p; p2 E* @) ~
#endif1 F5 x7 F3 O' `6 r
ret = platform_device_register(&da850_evm_tl_leds_device);
+ [) B( ^6 O6 A8 W* n+ P if (ret)
U. J& y) s! Y" {" L# O pr_warning("Could not register som GPIO expander LEDS");
' e8 z: s5 c& W* J else
4 L0 Z& x7 H9 U. h printk(KERN_INFO "LED register sucessful!\n");
" a9 h1 [ e; F2 c+ E
2 j" t- z1 D5 v' T) ] return ret;0 y5 `) P/ M Z l7 ]
}6 x" O7 j8 z% H `# g
) |9 O5 |8 X2 m+ e3 G" n
static void __exit led_platform_exit(void)
3 d! t8 U7 s& g6 B{
. I) P" z4 b2 I r9 Q$ [ platform_device_unregister(&da850_evm_tl_leds_device);. F* m6 O K1 k# o: d) p
" ^$ p4 j3 O8 f/ U1 n
printk(KERN_INFO "LED unregister!\n");
. h S2 x0 O- d J& S# [}
& h9 ^9 i o% x' U- O/ I( I8 D, [ V! P
module_init(led_platform_init);! `. z5 A* r7 o
module_exit(led_platform_exit);. A' @4 n# d. x; z* O
# O" Q2 R( q& n! D: z( j0 S% ?MODULE_DESCRIPTION("Led platform driver");
( J4 t, D# d" U% R* U, XMODULE_AUTHOR("Tronlong");
: q) E, Z. _3 g; F) W8 \6 \+ P. p( ^MODULE_LICENSE("GPL");2 |: }' {9 \ l; ?' v0 \
3 A1 s$ W6 y( J7 ?9 C% F
|
|