|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, r/ I! v1 _$ Y! y
#include <linux/init.h># p0 t9 N9 V& D. D) A
#include <linux/module.h>$ L* u' a* _1 C# G/ W. b, A
#include <linux/kernel.h>$ D! m) k+ Z" B5 I% s) _5 V5 d' L
#include <linux/types.h>( @' }% T I, [
#include <linux/gpio.h>
: ?* r3 z- {5 |& h/ ?3 h5 F: h" {#include <linux/leds.h>
: S3 _* n" |. u$ S5 @! O+ z, g: I#include <linux/platform_device.h>$ I- U# u6 v0 L/ Y4 R1 C
9 I9 V7 A+ F3 l8 A' e$ t( i1 K#include <asm/mach-types.h>
( {& I) m* P# G" ^( r#include <asm/mach/arch.h>+ M+ K$ k( ?) ~' u* [* {# b
#include <mach/da8xx.h>* `6 G, }' `& `2 l9 {* x# p; b
#include <mach/mux.h>/ |' B1 `+ a. c( S* H
5 ]' X! ^6 @% b#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& W; X' I9 W( |* \5 _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ Z- w% M" P5 T( [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. I* n4 N; s1 e" c* l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) m: J! U) w. x" i) I
- n. g k0 R0 E( ~6 Z" N/ V
/* assign the tl som board LED-GPIOs*/
9 B6 j# e* @9 r8 H. x. g2 [3 ? Wstatic const short da850_evm_tl_user_led_pins[] = {
# v: u' u: B4 E /* These pins are definition at <mach/mux.h> file */9 n& k+ ~& J* B$ T% ^% x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 C2 h, U# J# r( [) v S- d5 b' U
-1
& M0 Z# B, D$ ^) `4 M3 X};! B4 I$ M( e$ @) r! l
w" ]/ D: L6 m" M
static struct gpio_led da850_evm_tl_leds[] = {/ A3 s: l, w @9 ]7 p J# A
{
0 E }" `7 l3 E .active_low = 0,- J# v, V: U6 Y
.gpio = DA850_USER_LED0,! E" n. V6 k* q+ @ S9 U$ G8 [9 z
.name = "user_led0",3 o( n% e3 s! Q O/ o
.default_trigger = "default-on",4 E5 A; o% I h& X0 f9 G
},
C! | H7 k7 M) U( F! F! Y5 D {
8 ]0 H, W) e% {" Y1 ?, R .active_low = 0,4 t! e4 z p8 j, p% R# i) B
.gpio = DA850_USER_LED1,5 S9 j$ `* Y% I% i2 k
.name = "user_led1",
; }. N! E2 D5 f0 x .default_trigger = "default-on",
* c* c& A. L6 g# e3 y$ a M# M },: _# ~3 Y- Y/ l: z/ `8 w4 [
{
+ R. ?" n. [8 A3 I .active_low = 0,6 Q$ {& T, W; p8 ?& H
.gpio = DA850_USER_LED2,' w: \+ H) {' w0 `
.name = "user_led2",
! e; B S2 D5 ]8 _, Y N5 v" f .default_trigger = "default-on",
: [$ x& F. f; O2 }* W },6 R% z, L; c- d9 ^$ B; ]
{
2 b1 q; k1 |' P% [+ ^ .active_low = 0,
7 [* G* G) j5 a4 x L! b K .gpio = DA850_USER_LED3,$ j* J! G! v; p
.name = "user_led3",
; t) h, n* x2 y. y8 A .default_trigger = "default-on",) _+ P' R3 U7 F/ b( q7 ^
},
8 o" y- J5 ]: c: I" J* ?; N6 p};
3 o/ M* t7 m' w* p% ^' l3 y
% ]! \, b. {" P( ?1 q% Mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ B |6 [" h" |7 P1 E/ J7 w! t; Z
.leds = da850_evm_tl_leds,
4 E9 m' s/ H: a. G3 |* U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 R9 [& _% O/ z" i: x1 p4 S
};* I- Z n3 f1 ?- v& u* c
) ?) W9 A2 v- k+ \8 o" c- v* |static void led_dev_release(struct device *dev)4 ^' Y1 c) g" }) y: t
{
/ c+ H: r! S: t( Q% Y, }: F1 c};
3 R3 `& J; K$ e+ q
& u x) a5 e# q7 Q% [# |static struct platform_device da850_evm_tl_leds_device = {
/ X% ?3 L8 N6 ^ j" v .name = "leds-gpio",
( }3 E0 L3 w1 W% F/ Z* { .id = 1,' k2 Q# s8 r7 \/ M+ u3 O* T
.dev = {
* z' s! F5 Y: h) R .platform_data = &da850_evm_tl_leds_pdata,
- t1 {4 [* c$ E+ M! W .release = led_dev_release,% q- H8 m9 R3 _* ~9 f. O" C1 H) K
}, C% r. e, z/ Y6 K1 t
};
0 O' n5 U2 Y, S9 Z" Y, O. e- o! [ A5 J: j! [# ?2 d
static int __init led_platform_init(void)
! q: p8 T- I4 m" w8 a{9 o8 V) J! S" M1 `$ l8 h) }
int ret;
; L( j( i; Y0 l- _: V( I! E; N#if 0
! J, {! Z" e* R/ P ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 f, G" f- q* n( b, W; U if (ret)
4 ?" ^ ?/ t! X: \* H( V pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 `9 w8 G1 ]+ C$ a {" ` "%d\n", ret);
, o4 Z, }! A5 @& ]#endif% r" g1 v C' N
ret = platform_device_register(&da850_evm_tl_leds_device);2 g; C. j; d) _( q
if (ret)/ O$ N _5 s0 p" T$ _ P+ ^
pr_warning("Could not register som GPIO expander LEDS");
9 F! \8 `5 K6 h* g+ S# ]+ i else; ^+ ^5 P+ n9 |5 r% n
printk(KERN_INFO "LED register sucessful!\n");
; U4 S' N+ V* N+ y6 a: Z' R$ D5 L9 F4 r, c# }5 h# p; h
return ret;
9 T3 h! Y6 E( K& g* {# j}& I% X$ J0 J) F0 j
' i2 g9 y$ b2 W! W5 kstatic void __exit led_platform_exit(void)) y8 \- ^, I% x* {
{
3 z* H( Z# V' y0 D platform_device_unregister(&da850_evm_tl_leds_device);
. y) {( b# N- I, W
" K9 k, u& t3 G# z9 |/ P) T printk(KERN_INFO "LED unregister!\n");3 C8 i6 [0 ^& X- w# J( B$ k% P |
}
( v0 ~# z6 x" Y' f8 C8 J, @3 R# q. j! V6 [) h( z
module_init(led_platform_init);0 R, r- X8 Q7 X, e
module_exit(led_platform_exit);
; P1 B. y5 x `0 g! x# h& h
9 R9 L. k7 I# J! F- bMODULE_DESCRIPTION("Led platform driver");
# ^0 P( W: X0 L4 x- m {MODULE_AUTHOR("Tronlong"); ^: M( d9 i+ h
MODULE_LICENSE("GPL");4 C' i; B+ s3 e
{0 u! Y6 ]2 i/ D: B4 {% C
|
|