|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' A8 l' I# O! O& R" k/ } r0 U
#include <linux/init.h>
" F% g* B; Q2 Y& r4 T2 E#include <linux/module.h>; \+ |) ^0 V( D; t; O j
#include <linux/kernel.h>
# d, I# R- z k$ b#include <linux/types.h>2 S0 n( ?8 k, z! e2 `
#include <linux/gpio.h>0 v( j6 J* F4 L
#include <linux/leds.h>! N: d2 S7 y9 x2 R# A _
#include <linux/platform_device.h>
" y: [ Q/ b5 c3 d5 i; n
4 f7 d+ P( q2 y, C9 K* h6 p#include <asm/mach-types.h>$ G7 l* U. v/ u1 z0 P* n! j
#include <asm/mach/arch.h>( h, `' r# h" u8 ?$ h3 j" ~
#include <mach/da8xx.h>
; _& e0 G z; f- O3 ?#include <mach/mux.h>+ W- ^! H. x. j) d! R! m
2 K2 J6 @! q, c5 A9 ?& d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# t7 B( ^ H" S3 u1 m! U) E" O3 o#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, w% c, K: n0 N; q$ |( h5 E, @: N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 o" v0 J! k) Q8 q- |4 k#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), x3 s5 a$ b1 K n1 n2 O' z- a. }
4 d6 ]* t( [+ H8 W: o3 o( g% E/ b
/* assign the tl som board LED-GPIOs*// ^4 H) [6 Z' j O, u
static const short da850_evm_tl_user_led_pins[] = {
a& f! v5 y! L3 a( o8 K /* These pins are definition at <mach/mux.h> file */: A- i9 v5 ]4 i9 m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! b6 V7 Y' Y7 b" k1 H3 ^
-1. [% x h% k* M; |4 b7 y$ i; H
};
0 v' j2 c @- V) [. A+ L
; Q' w) X. F2 l7 Z4 u0 fstatic struct gpio_led da850_evm_tl_leds[] = {! D, I5 |" J0 { O X* d: b
{. S8 r7 C: {, n' v7 e' U
.active_low = 0," V b# { L7 }* z- q z y/ R/ X3 ]
.gpio = DA850_USER_LED0,
# w9 {4 |: v9 Z v9 e: U( a5 J .name = "user_led0",- U) A1 l; r- H4 W5 @5 K
.default_trigger = "default-on",! R. U* y, V, y' s+ R) }, b5 T$ f
},
* o% n( h4 Q {5 w {4 I' C+ V0 d1 H! L2 M
.active_low = 0,
4 D4 i* O% y. g' E3 t+ f# M b .gpio = DA850_USER_LED1,
: n s+ ?! ]8 U1 b .name = "user_led1",
; _$ P. X4 E: ^0 L .default_trigger = "default-on",- W' [) k7 `4 P( n1 n% e5 Q
},
L! p! _- z# J* ]: ? {
2 s w b/ A) t& @9 ]+ N .active_low = 0,2 h5 Q3 h6 ]; _1 P
.gpio = DA850_USER_LED2,2 M2 \4 W/ `9 Z: L
.name = "user_led2", h u+ s' o+ g* j3 Q
.default_trigger = "default-on",
) T: r, c$ E/ b' l },
, K4 s: R$ }$ p( I# Q& D {1 ^$ e/ R5 N& M
.active_low = 0,# ]: _+ g' q$ _1 h5 T" G5 K
.gpio = DA850_USER_LED3,8 G4 ^0 O" c% m# m
.name = "user_led3",
, u* G* X( p6 A8 C/ s, A .default_trigger = "default-on",$ e% ~) M) E/ g; K* Y
},* s7 E( h+ b9 p& W3 ] k6 F+ _
};2 f/ U$ s0 i9 f' e4 b$ v4 v
" B" Y# c: _2 Q; `# A1 cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 A- d: p$ n+ k1 F& @
.leds = da850_evm_tl_leds,
- M; ?: p) R' N& ~3 c. A .num_leds = ARRAY_SIZE(da850_evm_tl_leds),& G2 P) k6 S, M' B
};
/ r9 q" Y- B. I+ ]0 I1 u- ~7 N; B% i6 g2 m& X9 @
static void led_dev_release(struct device *dev)
) j3 c( J6 K! @3 b$ S{
/ a; D8 m; Z9 K: B7 ]2 j}; p( q& s; n( `# B" [* ~
# o1 H: F' D. J, C3 |5 Astatic struct platform_device da850_evm_tl_leds_device = {$ S/ J3 d$ [" p" O) @0 K) C: z( E
.name = "leds-gpio",
# S: M( p, A( e; @1 m! d .id = 1,
; i2 u$ a* l) u7 V+ g( R9 w; F .dev = {
) ?- d7 N+ L% J0 G4 U8 \ .platform_data = &da850_evm_tl_leds_pdata,6 f- E$ \% f2 Y
.release = led_dev_release,4 F5 L8 Y8 {0 w/ k5 T9 `& S$ x
}7 V' k( P3 @. a9 b1 [, v
};
+ E3 O! D. d$ D9 }0 U$ H d
1 K4 J1 E/ d: astatic int __init led_platform_init(void)
. E' F: n1 ~1 X2 P9 Q{
* a. | G. Q) p0 I+ A int ret;# [7 b% r0 y1 a5 e" l1 @2 `" ?, k( C H
#if 05 C1 ^: g6 d$ \. s' }. M
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 N7 c! z- L' G" Q' ^' ?" ?2 [0 Q
if (ret)5 K9 a) ]& i2 y, \4 I2 @: T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# L# I/ X& j# Y( E9 E: b
"%d\n", ret);# V- m9 ]( E" W A
#endif
+ N7 b- r# t' G ret = platform_device_register(&da850_evm_tl_leds_device);
, K+ D8 _; A3 a, C; T- G; o5 c if (ret)6 U Z/ C! Q# O% u9 s9 r8 q, E
pr_warning("Could not register som GPIO expander LEDS");( } @" d6 I5 M: v' L3 }( ?
else p2 t( K, R1 o/ }
printk(KERN_INFO "LED register sucessful!\n");+ R2 `+ z9 k# H+ K; q' ?
! ?8 w% Y! z- d
return ret;
4 I) D% M# k0 L}
! p8 ]4 L( \2 r8 y4 [; e: ]& Z
" l1 b- ?, [4 Q" v& a. A5 c( Mstatic void __exit led_platform_exit(void)9 ^: u! m0 e; v% U3 b) n$ p4 N1 N
{
4 }' C+ z5 s: @% j platform_device_unregister(&da850_evm_tl_leds_device);6 T3 R; U) v# ~* B$ z& o
4 a. X4 D) o* ~* L1 ` Q' T% @ printk(KERN_INFO "LED unregister!\n");* D7 _6 c5 u& {4 Y3 _) @2 u" v
}
{6 k% Q- a3 S! y' B; l) E1 ? @, L6 W) a" G
module_init(led_platform_init);( d6 p: A- M# F. Q7 ]
module_exit(led_platform_exit);# |. }4 B' u0 q- ^$ h1 s
, A1 W+ Z. i( O. v; \( ` Q: {
MODULE_DESCRIPTION("Led platform driver");
2 Z9 _9 ?: U3 _MODULE_AUTHOR("Tronlong");2 O' U* N8 P* u+ X$ P
MODULE_LICENSE("GPL");7 X* x; i0 W6 Z2 }" ^
# t5 Z! T: C9 N* d! K
|
|