|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" g7 R) o; C+ D1 p#include <linux/init.h>
+ r) |4 C }9 \, T; B+ X#include <linux/module.h>
/ I, U# |% q3 M8 o( L; h9 T' n#include <linux/kernel.h>
/ U3 v7 k# d/ d4 `#include <linux/types.h>- D8 M5 E0 G1 s: m+ n! ]
#include <linux/gpio.h>: [9 @5 ~/ |+ m
#include <linux/leds.h>+ i- C; D! }" f9 S% `; I
#include <linux/platform_device.h>
/ k1 _/ V' R' I- J% x( s/ p4 Y( f2 D+ e7 o& v9 `
#include <asm/mach-types.h>" H$ y( ^% ] X! } M
#include <asm/mach/arch.h>
2 ?: e/ Q3 f9 O- K+ Y9 d#include <mach/da8xx.h>( m8 e. c B# {2 }- ~% h! ]
#include <mach/mux.h>. c2 d$ Y1 _+ T9 i
( s6 d4 i) @. E- r8 S% u. V#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( x8 c3 k9 B9 T1 j- F6 _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) V# m4 g# o, W$ w2 `% e' N
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 O3 u z% T+ E#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ r% P) p( g8 q! H2 N8 P
: p% z, q) O% w/* assign the tl som board LED-GPIOs*/
( D$ S# C9 Q5 p$ f2 r- ^! I: ostatic const short da850_evm_tl_user_led_pins[] = {
. S. P3 E6 K% j% {4 I6 W /* These pins are definition at <mach/mux.h> file */+ `$ } d" L* W2 ~, E6 _
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, h! j O1 W0 l1 V( ^8 }
-12 j4 s" B$ u3 g
};3 n9 {8 y0 D6 I; K7 H8 e8 y) v. u
; R& P9 w( l; Z, c! X
static struct gpio_led da850_evm_tl_leds[] = {
" @ i2 Z2 m E% ^4 d; r {; H4 w" z: I2 r) u+ q3 b
.active_low = 0,2 Q* r9 c s! S
.gpio = DA850_USER_LED0,
3 P+ y) P. ]/ g! G/ s1 O7 K .name = "user_led0",
: f- S% y( W; b( b; B .default_trigger = "default-on",, l5 |0 K7 \ c& P& j
},+ l& D3 @' r/ X: b; m
{( s- Q B n0 e
.active_low = 0,2 V, q1 N% |* f/ _
.gpio = DA850_USER_LED1,% [% F! |- s6 A0 ?( |) ^
.name = "user_led1",
; m9 a9 M5 e/ h/ E- d: m .default_trigger = "default-on",) F& v7 C2 t5 ]" d O
},4 u7 A5 I) V/ q+ o- X
{
% d4 o6 g9 a9 r9 ? .active_low = 0,
/ H5 l9 S- w; [( G .gpio = DA850_USER_LED2,. z8 [) _( c V$ |
.name = "user_led2",2 z+ I/ U, d' T4 ~/ q( J
.default_trigger = "default-on",1 O% C9 V$ B& V$ i4 J- x4 O
},
0 W" h+ K1 A" P/ G* s {
; R8 Y \! i* m& |1 n( Q .active_low = 0,% a9 k v9 q' d$ F% C( l
.gpio = DA850_USER_LED3,
! ~" P1 k, p+ O, U% J6 ~ .name = "user_led3",- {" X2 ], m% t3 B0 }* T
.default_trigger = "default-on",
K$ H( H+ | e1 ~( A' O }, l( K* z( R# x x. {2 |4 s
};
' h9 Q3 S3 C' X* P6 _& y: r
7 |5 B: _+ L& @2 |/ W. s+ R) bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 O7 B9 B* p+ P
.leds = da850_evm_tl_leds,# q$ j/ e7 D v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: T5 X7 {: X9 p+ [. m4 Q* N" N5 |};3 s) d# F- A6 F' M0 l M
: M2 n/ E6 i+ m2 L. xstatic void led_dev_release(struct device *dev)- ^; j/ R3 W9 @2 u. J5 q: m3 T3 j
{
: u& W b, |' d2 S) ^}; l9 P* l( g' d9 |
/ k. a. D4 s" D! ~# H* _% c
static struct platform_device da850_evm_tl_leds_device = {- C$ I0 ]8 {& H$ b; t# {
.name = "leds-gpio",$ Q/ |% r; y# b8 T' F
.id = 1,% g. [! R% o7 a* m8 c; t5 Z, F7 }
.dev = {( b9 S, E3 G% y
.platform_data = &da850_evm_tl_leds_pdata, T$ X3 X" C" s, g) S
.release = led_dev_release,
9 c% D, F! G- H1 } }
$ G, u+ S. G8 C7 h' L7 ^4 P};" k" e2 D0 T) i7 _' U( }# ?. D
& j3 a, {5 \% Y2 c9 ~; ]
static int __init led_platform_init(void)9 C1 d- W% P2 C/ n/ T6 ` P
{
4 S$ l; P) z# f' n9 ~ int ret;
, a- i1 A+ R, P6 M#if 0& g/ t9 @2 |3 W
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. }! G. ^$ k# [) M
if (ret)
\+ s; i% P* N% Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: @$ [/ n7 ~9 ?% l5 J8 y& Z! |$ M6 g "%d\n", ret);% z8 j! _; S5 G7 ]
#endif h/ y( C5 W( G: U* w
ret = platform_device_register(&da850_evm_tl_leds_device);- L# W& U% g9 a) j
if (ret)4 x' X) ? y* ] ~$ l2 a/ ?0 l
pr_warning("Could not register som GPIO expander LEDS");5 y& v: \& ]3 o$ P
else) n- ]" p. V& p/ ^7 {
printk(KERN_INFO "LED register sucessful!\n");
; Q2 a7 k' p0 \, g; q
$ }/ z- i% G4 r; s: h return ret;
" c4 ^2 }7 |$ y}0 P: s! h* F' X7 d" V. E
, W8 L! ?3 K+ x9 z5 ?7 Z
static void __exit led_platform_exit(void)
$ F7 r& v4 ]9 H# c! n& T6 \+ F% Q{
: J- {: p2 k d platform_device_unregister(&da850_evm_tl_leds_device);
9 [3 e& j: ^1 W, H: i' p) h6 J- \7 M- [1 r' Q# z- o8 ~$ C
printk(KERN_INFO "LED unregister!\n");, ]+ _# Z4 v# C3 F( H: e
}
9 B! \* c: b+ a2 O0 [& a& u& Y! ~4 Y& j) \
module_init(led_platform_init);
) t+ S& }9 g( K, K s+ q1 gmodule_exit(led_platform_exit);
( j8 P0 i- v+ K& R# P0 f/ R$ O0 S( ^# {( F M2 W
MODULE_DESCRIPTION("Led platform driver");
2 K, Q, |: _3 ?7 }# ZMODULE_AUTHOR("Tronlong");1 h* T6 C# ~4 e9 ?
MODULE_LICENSE("GPL");9 n1 x- N; ]9 F- p
5 L, \+ O% s( L" ` T- T8 {) k8 {
|
|