|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 F, J( n; J j- o: J4 ]* ^
#include <linux/init.h> [1 V' x9 k. I- u
#include <linux/module.h>9 n$ R- {5 v' T) `" ]" A# g! D
#include <linux/kernel.h>0 g- n. Y( n+ h. M3 e* O1 B6 a. s" B3 N
#include <linux/types.h>5 a) H- Q2 [# D$ j( P) P0 E
#include <linux/gpio.h>6 a& N, _' Z% W5 F/ A4 g* R- W
#include <linux/leds.h>) ], M: W0 J1 n# H% M0 C: c) E& D( N
#include <linux/platform_device.h>
1 ?" E, E% N9 K/ m- h# Y1 K2 Z! t& H5 h
#include <asm/mach-types.h>& G1 D3 F* H/ M# ]
#include <asm/mach/arch.h>
t" A, z$ |+ u2 s( p#include <mach/da8xx.h>: [) V5 z2 g' h( a
#include <mach/mux.h>
$ s( D; Q5 t$ |2 m9 b9 p% j4 ]% p2 U+ S4 U% S6 E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" G9 P) ]/ a: @+ N#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% {! D$ h, e2 \
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# G+ _7 n, |' m4 n5 z/ R9 K) q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- s) C3 Q# U* I5 R! _/ g
; R l9 j6 M- H% w) g' \1 e) y/* assign the tl som board LED-GPIOs*/. }# S: ^ |# C, b5 d
static const short da850_evm_tl_user_led_pins[] = {
: h7 c+ f# {$ J /* These pins are definition at <mach/mux.h> file */
2 p- H+ c5 H* b$ y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, h0 G' V* r" d5 o -1
, z0 l) V: T9 M. X$ m, I7 H};
* g3 d9 N" V; S# T$ i
1 ]8 D b9 n4 p( V/ v% }static struct gpio_led da850_evm_tl_leds[] = {' ~9 ^) g' m: \ h7 e
{% V3 c+ ~& V9 o8 ]
.active_low = 0,
* ~* H3 T( x7 v- h .gpio = DA850_USER_LED0,% p: v5 W: l) J) P
.name = "user_led0",5 j4 _- I# s+ G: l+ g: y
.default_trigger = "default-on",' z8 H: S, W. i+ c' t9 }
},
/ K# C: g) H+ _ g {" H5 K# |, n2 Z- m7 l5 ?$ x8 P
.active_low = 0,
( B$ S9 q" M4 m6 q .gpio = DA850_USER_LED1,/ ]" g2 o, [, U, I5 _& @. `
.name = "user_led1",
, ^, k4 E+ S" e b! z .default_trigger = "default-on",9 S1 v( u1 `+ \+ k0 {
},
8 \! M- @! G. m: b! B {
* N, B3 S8 r; Q, @ .active_low = 0,. l! e" g/ ]. I2 g% V
.gpio = DA850_USER_LED2,4 }3 m& g4 u! f4 v0 V+ N
.name = "user_led2",
' h/ m! s% y% Z$ j8 {0 W1 @ .default_trigger = "default-on",
$ D/ e! G9 g H" i4 @ },
; d) h; V4 ^5 H6 K {
* M; t8 w: h: r( U( ] .active_low = 0,; j( }8 O( e; [/ e1 v) z( U7 ^* B
.gpio = DA850_USER_LED3,
& u5 t) {5 [6 m3 ?. Q/ ^ .name = "user_led3",
6 b: f( c' x' v .default_trigger = "default-on",
* ` R5 a8 |: R& E" A5 z) ~; b; c6 { },( _0 v# ~8 Q' v; r
};
& T5 o- \ X; ?$ q+ x0 n
' h I- |4 u0 I/ W* M& V! D4 h! _static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) `$ |* ^4 T( U$ O .leds = da850_evm_tl_leds,0 y( M0 Q$ U9 a: r% Y; ~
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& [0 V* ~! t# k! { [, f" d9 p. c6 h};
5 f- w% Y p: H' {7 G
3 v( z, i& D4 b: ostatic void led_dev_release(struct device *dev)* ~, w' s, `- B0 m
{) C9 j) G2 o: @; x" }3 \. I3 H( a$ j0 k
};5 v; K' D8 Z$ Z. @" i
6 U+ _6 z( ~" j, E) `) i
static struct platform_device da850_evm_tl_leds_device = {1 r( \; z, w7 A1 y! g9 q% E9 M4 }, c
.name = "leds-gpio",$ H- G9 q* ^% K4 T% x
.id = 1,
1 Z6 l& V$ M' F7 ^0 F( w .dev = {
, j- |9 B- k- u .platform_data = &da850_evm_tl_leds_pdata,
( Y" K3 l% M" E$ ~ .release = led_dev_release,
9 ]7 C$ F' O; q" D& I2 Q. r }3 F" J4 \+ |1 U8 V7 N
};
8 i5 O+ N% `' [! S# A- T+ c- k) H6 }- S3 _* |* X. |/ T/ Q2 r R( l# Z
static int __init led_platform_init(void)
, f1 P; \! R" S6 `{
! U3 E! r! n& d- @" W# N. m3 O' p int ret;8 a+ y7 O8 _% Y: M1 d3 v
#if 0
# g9 F5 ]6 s" s3 B1 W ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, c0 t' n0 R# d: v
if (ret)5 ^2 i7 l% s! x! \: _
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 c9 T! W0 o) y' \
"%d\n", ret);6 Z# e" C' s+ B! S8 C. B% L5 H
#endif* j5 n2 W7 y0 O( ^) m4 k
ret = platform_device_register(&da850_evm_tl_leds_device);
- }6 f! Q- P2 ?) p9 h' t3 H9 O! p if (ret): J4 V) \5 x- g% E
pr_warning("Could not register som GPIO expander LEDS");
3 w& H9 m3 ~3 L \ else2 Y8 a a; R; S! E' K
printk(KERN_INFO "LED register sucessful!\n");! b! L; k# z! ?0 L
; S& F* d1 i3 a' c( J% r return ret;
! z* @! t- E& Y7 Y4 f}
" o. @9 H Z% [+ ?$ L& j( _8 ]' m t8 e+ Q* ?0 R2 F
static void __exit led_platform_exit(void)
0 M" z; p( w6 X: i- |' Z6 e6 }{
0 Z, R/ s. p& L7 a, r platform_device_unregister(&da850_evm_tl_leds_device);
5 i) D" ^. B# P- c
* ]2 W& _5 O9 v7 \ printk(KERN_INFO "LED unregister!\n");
1 l |6 S. U# h* k- t1 U}
5 Z: x# U) ?' o+ j+ T
4 W' V* N- c) z' j4 V" F% amodule_init(led_platform_init);3 a3 R8 N4 H% g$ P. G0 k N
module_exit(led_platform_exit);
1 w+ p: z2 E5 B; i5 `3 g
: s2 S0 ?) I; W4 \MODULE_DESCRIPTION("Led platform driver");! G( o1 `2 [' q% h0 ?2 o _9 K
MODULE_AUTHOR("Tronlong");. `6 S* [- ?. L2 @. m- C4 ]+ S
MODULE_LICENSE("GPL");2 X* y- j3 x( B( d0 L
+ c& y1 q9 d! g( L: d: B2 A
|
|