|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; e( h$ x5 r4 o' {* C. v! c
#include <linux/init.h>2 C' Y6 E$ O+ G, h" s- S
#include <linux/module.h>
5 m5 ?3 J" A/ r: g4 b#include <linux/kernel.h>
- |! ?$ \2 a' ]4 Y#include <linux/types.h>
3 ~! y. w3 ?8 u; o3 d; u" _#include <linux/gpio.h>
1 @8 d( y" z( I' ^5 K0 S#include <linux/leds.h>
! @& g9 }1 X& C# ]9 _0 y#include <linux/platform_device.h>
5 T. W+ [# s% S" {1 _/ a4 E7 N/ a! |# [" u* v/ z* F( O( _! F L3 ?
#include <asm/mach-types.h>
1 T6 s5 K# q9 `$ `#include <asm/mach/arch.h>
( l- N$ `0 ?. d w4 Z/ e#include <mach/da8xx.h>' _6 ~' w# T- U' y8 B1 J/ w9 G
#include <mach/mux.h>
2 i" \% ^7 X8 s, ~) s/ S$ _) P8 @* R. |
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) B$ y+ _% [( @: e; y! k4 i/ c5 t& Q c
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" t8 _: k4 D2 n1 R+ G" v* W* D#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 y8 a$ ~) l1 D- D3 @8 c#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 v2 K+ V( `( N2 A& U. E9 T5 o' b
9 B0 e, \0 P* D d& d. Y/* assign the tl som board LED-GPIOs*/
1 O2 z* e. ]* i& D. S( v$ r8 W: Wstatic const short da850_evm_tl_user_led_pins[] = {
6 M0 }1 M* s/ F1 r. ?: Z /* These pins are definition at <mach/mux.h> file */
# u( i! ^* Y% |' n3 n" R DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! @+ _* J( a! N, U; }3 B+ S -1
7 \' ?7 x4 W' D; t& z5 Z* _};
2 a5 E! @7 F: R ?! L( c
$ n4 t, Z4 K/ Q& x3 V1 tstatic struct gpio_led da850_evm_tl_leds[] = {
' @& W2 [9 a% w. \6 G* M& Z {
0 W2 H8 o; ` i2 k5 r! x .active_low = 0,# e! R+ z- G5 p j6 R% ~
.gpio = DA850_USER_LED0,/ x# c9 Y. t0 A( C9 [
.name = "user_led0",
0 E9 }# I" ~3 B3 ], n( F( H .default_trigger = "default-on",! E: e9 l/ o* V) c
},% F" O$ L. a. z3 }5 ?, z% i
{4 x/ s8 H$ X, ^/ a* A
.active_low = 0,1 n2 A$ U, t+ a
.gpio = DA850_USER_LED1,
! h7 L C6 Q! H5 S- M .name = "user_led1",# d- k$ J6 ~+ E1 U
.default_trigger = "default-on",* S. Z" P$ [7 j
},8 v1 |/ K- F4 A/ x+ Z& u; n8 ^
{3 R( P+ Z5 {& h6 P
.active_low = 0, D! X& S, V l% I3 n7 O! L3 D
.gpio = DA850_USER_LED2,0 q8 O7 T; W: s6 f2 Y& p* V2 o
.name = "user_led2",3 U9 \, ^# I" H, X5 X0 g2 }- V
.default_trigger = "default-on",, b7 `) J. M& n, N0 W2 h$ [
},& o# ~* a$ J- c% u
{- I* U6 r( Y' ]' {/ M0 M: K; A# T
.active_low = 0,
- ^& O& n& p+ \; F- [ .gpio = DA850_USER_LED3,4 B7 m- `/ F3 V R* g" Q
.name = "user_led3",
k, V+ L: b' m' b) U5 A5 z9 t .default_trigger = "default-on",
* v3 N4 r. v! i },2 ~+ G# J, W/ z1 w3 p5 ]4 r) }
};
: {/ ^9 R5 C* Z) q% L& X$ a
9 L a. z7 m3 M# bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ x4 K% \4 r9 I .leds = da850_evm_tl_leds,) U* T4 {/ a8 l J) j. x- L. U
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 {4 ~! C( Q5 u% \! n" F' p};
9 U$ z! s5 R/ k$ m9 D7 c- P
" d; H, y/ a+ d9 Q9 Fstatic void led_dev_release(struct device *dev)
: C; T' l5 P q{
. M6 ?1 _0 s6 i( {};
' X4 H2 p5 F3 a0 q' u8 I. r" A4 u. y2 ^* w3 k% L
static struct platform_device da850_evm_tl_leds_device = {
- g: Z$ o, T+ f .name = "leds-gpio",
I+ k7 n+ x: g9 l3 G( S) D8 r( _ .id = 1,3 }9 S" { P. `5 X v
.dev = {6 z( i% F% f- i4 o1 ]
.platform_data = &da850_evm_tl_leds_pdata,
- v; N# R7 w9 W% ]: d5 D) h .release = led_dev_release,, z& p+ h0 n0 B9 p* u8 o1 c/ D% f
} D# n" l) U* p! O/ C
};
9 O5 @8 Y4 q8 W; \) G0 D6 x9 [& w9 ~ g$ Q6 P
static int __init led_platform_init(void)% S+ I# E3 _6 \$ p: y3 S f+ e
{
( ]2 x, y) C+ ~, x+ p; M8 C7 M int ret;
# W: p, Z) B3 m; h4 z5 h#if 0
2 f+ z: u: o2 Y2 `; J1 y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 u3 I$ S+ q1 W/ q
if (ret)9 B3 q3 ?) I: L9 {8 _' c1 R
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 r1 V* u2 B; Y$ m; U "%d\n", ret);
- Q0 A- Z1 n5 ]1 I2 l+ k#endif5 v" w& s! u; ^9 @. Q0 x$ @1 \ \
ret = platform_device_register(&da850_evm_tl_leds_device);- y' k7 ^, \6 p0 L
if (ret)" `( T6 c! d8 s0 R+ k# y7 S5 G; i" k
pr_warning("Could not register som GPIO expander LEDS");: p( C$ W* W+ ?5 S" u
else9 L, j; W8 _$ F# F( h4 K' k7 T
printk(KERN_INFO "LED register sucessful!\n");
2 Q$ D+ Q6 \/ ]1 g' R$ [6 y, E3 N D
return ret;
# D% u& v7 H }# n7 i$ r! ?* u}
9 v! S- Q0 f$ o) b! P' I# ]+ o3 c1 a, o
r+ w% q. L* q3 `8 D3 pstatic void __exit led_platform_exit(void)
* d6 h; z/ [' y1 C S% O{
% F; V% Z; Y2 q$ P, o1 Y5 P platform_device_unregister(&da850_evm_tl_leds_device);" a3 }, \6 }+ G: K) t2 z
- V6 \$ N+ o" _( R; L& U* ?+ q% z
printk(KERN_INFO "LED unregister!\n");
+ _2 R" ~& f' n' y; v9 `) [}5 r& G. M! q7 U' O Q$ K
* {4 R8 y4 i8 s9 |3 cmodule_init(led_platform_init);/ \; d, ~5 ^) m% z1 [7 Z
module_exit(led_platform_exit);
, @# ^9 _# ^, a) R( \: J- f- { F
MODULE_DESCRIPTION("Led platform driver");! Y) G8 I1 b1 E0 k# F" W
MODULE_AUTHOR("Tronlong");
0 s: ~- e, ^$ U$ m" O AMODULE_LICENSE("GPL");$ o" X7 ^% T6 J7 R0 ]
) J2 F1 P4 A+ z8 r |
|