|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! ?% ~/ L" N4 M
#include <linux/init.h>
, R; b4 _$ H% @/ {; M8 L* I#include <linux/module.h>
8 m/ L" m! c" Y( ~#include <linux/kernel.h>
0 o, M4 [' u0 @* v1 U! k#include <linux/types.h>
8 J0 [6 u& ?! d5 A9 u6 D#include <linux/gpio.h>
3 z& ]- o% R; h( \: t7 r8 Q#include <linux/leds.h>
, ~# b5 [; c6 e#include <linux/platform_device.h>) g& P2 {3 G/ L8 E' o) J9 T6 T
; g6 A+ o# L# N' `#include <asm/mach-types.h>4 J' ?' d9 j0 b, G9 D7 h9 Y
#include <asm/mach/arch.h>
7 x. q. w: } I7 S" T7 h#include <mach/da8xx.h>5 R9 |; x) y7 x8 _& v( x! g D9 U
#include <mach/mux.h>
- u J6 L& F/ Q2 C' _% z% N, `! r n) l
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) f9 ~( {) p* Q, E: s0 o3 Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 y+ p" Y8 c3 @8 W#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- o/ `1 O) r% l, b; _#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. @% _4 [7 x& t) W# |. m0 X- c3 {3 f
/* assign the tl som board LED-GPIOs*/0 q& H5 S F5 @. C/ |. l( Z
static const short da850_evm_tl_user_led_pins[] = {
% c) ]. `' g) E8 S+ J6 k1 Y /* These pins are definition at <mach/mux.h> file */
6 }# O F0 ?9 F6 H- c5 s) h2 _ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," k) g' H2 h' u9 l7 ?
-1
9 M, ~( ~/ z) _# p+ M* m0 H/ F};
/ U. f6 I: t n) Y4 _$ a( A0 }2 l$ U. C2 \) A1 G7 W, g5 [1 M3 _7 q
static struct gpio_led da850_evm_tl_leds[] = {
" a- `6 r" p, ] q& \+ \. s' S! r {( v9 p2 k3 \5 P* N% ^" C
.active_low = 0,) K% `& h. r! D% [% J
.gpio = DA850_USER_LED0,
5 a( G! d1 q: B5 r N .name = "user_led0",
2 c1 D4 Z' _( E .default_trigger = "default-on",
' w2 O6 `' b3 m& u },2 f& W# g. J* \7 i# Z4 y) m6 U
{6 e% P: h$ ?8 D: n
.active_low = 0,
' s' [% \ t6 v3 j' `3 G& W+ q .gpio = DA850_USER_LED1,
. N! M# j# k1 d0 T5 s .name = "user_led1",
) k$ H* U$ G' ^& y8 [7 w) K .default_trigger = "default-on",
& U G4 ?$ ~! z! l9 i* O) b) } },
/ }$ n# U. U4 E3 e {
3 @% i7 o' x# O5 p" @3 [5 W .active_low = 0,) \& z. a3 x+ x
.gpio = DA850_USER_LED2," W% u0 j' S3 ~: I$ l
.name = "user_led2",
- {$ y, I1 {1 q& J7 | .default_trigger = "default-on",
A1 Y' e* p) L& Q: I1 A& [# F }, u% V, M" B s- M" M! g) P
{
7 N7 `3 _3 ]. {& }: W! ? .active_low = 0,
4 B6 I8 J2 |; } .gpio = DA850_USER_LED3,
# m+ G# P" G! @ .name = "user_led3",8 Q9 D G9 X- e, `9 l) T( P
.default_trigger = "default-on",
' x+ E: a/ y3 e; F! U) X' ` },
6 S4 k5 X: b" ]3 z};: Y3 _! _4 [$ Y
4 \ w/ u7 \0 ?4 d
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
d& u( N1 I% i+ Z% w) f .leds = da850_evm_tl_leds,
e( i0 x: h2 F' W .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- c0 h; r( V7 A1 L
};
- g, s' f4 r& F/ } ]- y$ a) m7 ~- H& ~& N7 E. v& w4 E- a
static void led_dev_release(struct device *dev)* ^0 H3 \* Z2 W0 D$ p
{
7 |: b* m* V5 Y! ~4 N! w" o# p1 |};
$ s& i% N" w! x; l5 x* R- g7 s( [* L4 I
static struct platform_device da850_evm_tl_leds_device = {
# v7 L `6 k9 D3 e% | .name = "leds-gpio",, }3 c* J2 |; U
.id = 1,* [) c9 D. T$ w7 g0 G5 V
.dev = {
- F4 c, u( ^( o .platform_data = &da850_evm_tl_leds_pdata,
* V+ M4 h5 c& E* z9 W% g- ^8 G .release = led_dev_release,4 b |6 I$ O j- F8 X# n& S
}" C: Z2 p0 l2 ]7 p, b* R8 t
};
( A: {3 l, t1 C* u2 I$ P/ u1 l! O3 S7 V: S
static int __init led_platform_init(void)1 T" o6 c, O' c' k4 m3 z, f
{
7 C: n* i3 N+ c' z int ret;. j9 `" W4 p* z: g( j
#if 0
" q9 z. {- d; x4 T) W; l6 I ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ n) c, H4 S- b, s, i- w% @. U/ k8 x
if (ret)
3 K8 M% J7 A) U! G2 c pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ q5 q! j1 j, w1 k4 }. Y4 q. W H "%d\n", ret);4 N; Z3 u; p! c
#endif
- Y' e" B+ P5 E. R ret = platform_device_register(&da850_evm_tl_leds_device);
5 W! Q7 S) K. h8 M3 u. N/ _ if (ret)
, A4 E; i6 j" G, f7 q h pr_warning("Could not register som GPIO expander LEDS");3 ], n" e& n& u
else. N s, b& H9 w v
printk(KERN_INFO "LED register sucessful!\n");# y H9 }" r( s2 O0 k2 e+ M
& w+ v0 J( D2 K' M' \
return ret;- v8 a0 }4 g0 c9 J1 f: w X# P$ H
}9 @- G4 W/ h( b0 @ k2 \; [
* C- m1 l6 o+ ] fstatic void __exit led_platform_exit(void)
3 l- B6 x' J) D{$ m1 L d5 f7 |/ L: w7 s/ l
platform_device_unregister(&da850_evm_tl_leds_device);
( Y1 D5 C) g" G3 \# x+ b) G. F, Y( o9 a f3 o ?: O
printk(KERN_INFO "LED unregister!\n");4 Z8 J; J- z" ^2 }* Y y. @
}; s; C& C; I& H7 v- p+ u: j: E
+ J% |) F1 H H& O9 n7 E
module_init(led_platform_init);' ~) H, v5 ^0 T- X7 o- R7 g, O1 T
module_exit(led_platform_exit);
" \' ?! V2 d& F3 e1 Z: J; |
! \$ e% T# R; ^' w3 F7 l. c8 ~7 WMODULE_DESCRIPTION("Led platform driver");
5 ~ @3 z2 k7 K& {$ dMODULE_AUTHOR("Tronlong");
" Q5 e/ q! r1 W( U0 }) G9 lMODULE_LICENSE("GPL");$ T4 N: R& E. I4 w$ J6 z5 v, \
) Q" J; R6 |( `$ p6 Z& R6 j7 @: X |
|