|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 R8 V/ g/ O5 x1 V
#include <linux/init.h>4 Y3 L9 h' z% H6 U
#include <linux/module.h>
- V1 \( `: r2 @! h3 B#include <linux/kernel.h>" X3 z0 B4 S% Q; z; e$ W$ {
#include <linux/types.h>% h/ z8 H% C2 I( J, c7 { f8 |6 n4 ]
#include <linux/gpio.h># Y Q) `& P8 M
#include <linux/leds.h>. D# W, G( F! q& _
#include <linux/platform_device.h>, m, L" s! }; T1 u$ I
* h4 W# Y$ p/ c" w( z
#include <asm/mach-types.h>: L7 R8 y( F: p# L+ q/ f9 x! v
#include <asm/mach/arch.h>
2 D% T) {; W0 ?7 F1 X! M#include <mach/da8xx.h>2 k4 _% O2 B. E1 N
#include <mach/mux.h>
2 h8 L) S$ d& J) I9 s2 g
@4 p) s5 @4 l! d: P3 n0 r, Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 g, v9 w" g. K/ l& l4 W#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% Q' [4 d% f, E" z3 R: M/ @& j+ _
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 z6 q' {4 Y( f#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- a6 v3 J$ n& ^! B2 ^9 ]& c
1 t9 q1 O' G' K
/* assign the tl som board LED-GPIOs*/% z" [1 e8 h- ?. V
static const short da850_evm_tl_user_led_pins[] = {
" }- }; c9 m: E0 y3 `5 q! P /* These pins are definition at <mach/mux.h> file */
, H1 G8 I- z. M# T0 I DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 l1 L2 `* x; k* l2 Y6 A5 Y -14 f/ E8 E: V4 G" v% z8 h- H
};6 A, k, @7 }, K+ Y8 u9 g: u( _" g
# {3 g2 B% Y4 Ustatic struct gpio_led da850_evm_tl_leds[] = {5 W, X% e2 b1 O+ l
{
+ N1 G, J% \/ @0 Z .active_low = 0,7 G+ b/ \9 ]7 r* [0 p: J2 w
.gpio = DA850_USER_LED0,
& O C5 m. f' t; @ .name = "user_led0",# [0 {5 ^8 D, ?1 S+ O6 @: d. P3 G
.default_trigger = "default-on",. k* @5 i, S+ X6 c5 h1 A+ w
},* O) H( M) v% k9 U
{
. q0 w7 A Z/ k& F2 X# k6 m; B .active_low = 0,
, l1 u3 z0 a4 ]6 S9 Z .gpio = DA850_USER_LED1,
) g9 {8 S, g2 k9 \. G A2 P# ~" e .name = "user_led1",
. q; L- E/ g7 Z6 z R .default_trigger = "default-on",$ X" j! b$ A% h+ [9 @) G: M
},
1 G ^) w5 [; B: W% N {, b6 v& f: H6 |, j
.active_low = 0,
7 u1 K3 r- W8 p) I6 W: ~8 Y6 [% y .gpio = DA850_USER_LED2,
) k1 `1 Y9 y2 z( B( k .name = "user_led2",
- O- K9 k! U& J4 t% u) o8 p. d- d1 ~ .default_trigger = "default-on",* {& O- O5 `0 \, m
},
* ]+ y `* G( i. ]% q8 K$ S- g {8 i- H2 j1 }0 c' _( N; d2 @! r& y
.active_low = 0,3 V5 i \4 l9 D! |% q
.gpio = DA850_USER_LED3,1 {; e: d5 u* o/ q
.name = "user_led3",
. Y& Y6 O" @9 T$ |. N5 \/ P+ R .default_trigger = "default-on",4 h1 h- A1 y* H% B8 }, T
},5 D% o( _+ r: K" w
};
& v# N- A+ S) F; B7 E! I0 V; H- @5 ~3 B# ^ O1 N- o3 k
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& j4 h8 U' b4 z& ?& u3 Z. X& U: R
.leds = da850_evm_tl_leds,
% A2 C+ t8 q0 f% f( b/ b6 z, S .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" S3 g% P0 Z1 V+ P8 L' C) n};8 \- f4 S! X( i8 M8 I9 p& Z2 S w. |
/ m) ~3 s( T+ [static void led_dev_release(struct device *dev)
+ Q. H2 Q; S1 ]* f m{; T$ `3 g1 @" s4 L$ @8 W
};: |5 `$ ~8 U+ S9 B
5 G) h0 {+ q: a Rstatic struct platform_device da850_evm_tl_leds_device = {
# H+ g8 ~% s# o& f+ n6 }5 k1 M# ] .name = "leds-gpio",
5 _( ]4 [# U" ?, Y0 Y7 p z .id = 1,
. t H- y: W' U .dev = {& R* x$ l8 j# z4 i
.platform_data = &da850_evm_tl_leds_pdata,
9 I2 r6 p. x# H8 k* @ .release = led_dev_release,
# t7 M# b1 V( T8 A1 ] }
/ R t, |, u# d; c4 w' L* v) t};
6 D8 q" z: P b3 {: P
; \: o: d" K7 E7 O, d* p7 Qstatic int __init led_platform_init(void)0 K1 n) i4 p0 g! _, k. {: f; E" ]
{
# e, x m! F2 F. j% C8 u8 I int ret;0 x* p: `# S0 N0 O$ h6 f( z
#if 0
% L# V) z8 N# h ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" M& ]8 I- \3 |
if (ret): m4 C5 y& z8 n2 i. {
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* z/ M0 r4 {4 b! M
"%d\n", ret);# E& ?: ~3 M& b, i' ~) C
#endif
6 y% P: ]8 W) z% C6 V, m ret = platform_device_register(&da850_evm_tl_leds_device);7 e4 S/ x, Z" R o; K
if (ret)
( O; V: z( p0 g# c/ o4 m pr_warning("Could not register som GPIO expander LEDS");) ^% c. d- d0 r: H. |
else
7 X' `: ~- n7 p printk(KERN_INFO "LED register sucessful!\n");
9 T9 B1 w% p+ i5 j9 ]
* O: i# _6 o+ U8 O return ret;
4 w" f* H2 Z1 o% h}
$ d" S9 ]4 P6 ]6 @
* t( w! I/ i" y5 Wstatic void __exit led_platform_exit(void)3 z3 |7 p; _1 V/ W$ r/ f
{- i# Y7 U- T& l% V! Q: Y! G
platform_device_unregister(&da850_evm_tl_leds_device);+ C9 X9 D4 z1 ?2 q
4 b/ y2 S9 [6 {, K4 h& j/ g: ?, ]
printk(KERN_INFO "LED unregister!\n");" p+ s( v' R5 R
}
* i" u+ s I6 \* N( i# j2 z; G0 P6 }+ A5 R/ o' j. h0 G- S
module_init(led_platform_init);
+ g7 {2 e( n9 `; h8 a3 |module_exit(led_platform_exit);. z1 I- E: u/ h
" a0 O4 H6 C1 CMODULE_DESCRIPTION("Led platform driver");
. k e# i1 u5 N5 i0 W3 ^6 ^/ qMODULE_AUTHOR("Tronlong"); f) |4 A R- \ E, [
MODULE_LICENSE("GPL");
$ s' l$ W* {& d7 `( z4 }4 y' ?% z+ ?5 }( U/ J+ l
|
|