|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ y8 V4 Y3 x2 G: q( h- j
#include <linux/init.h>
. ]* X& M4 P: P H1 ^- E5 P2 F% [3 w#include <linux/module.h>
- k* S A8 @6 ~% X9 T5 W7 I#include <linux/kernel.h>
+ h; `: c1 d* ]5 J#include <linux/types.h>% {' V, g2 A: r6 Q$ A
#include <linux/gpio.h>
. z& {# f# }7 l( |#include <linux/leds.h>
* X% s7 P# ^( C' z#include <linux/platform_device.h>4 a, s! H- d: o) n" e% _! k& _; V I1 P
/ \- @$ b1 |% V# ?. ^! U+ z
#include <asm/mach-types.h>& n4 T( K- v) ?) R" v
#include <asm/mach/arch.h>( k- Z w/ m8 n; O
#include <mach/da8xx.h>
3 m! K4 T0 b' I9 w9 t& O#include <mach/mux.h>
2 `0 g+ e- P4 t3 |7 ? ^7 K# z4 N$ X
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 d4 z1 \8 r) N( R#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! u: V$ v( I# g6 ]& B$ ]
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* K. a+ o0 o& l; n9 R' F" l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 ?3 Y* M9 a$ R& i5 i/ f
6 u1 A- Q+ r% S- t0 o1 f" V: l/* assign the tl som board LED-GPIOs*/
2 [2 ]# E+ [- I7 y# i1 s: ]- Bstatic const short da850_evm_tl_user_led_pins[] = {
" Y* n1 o: }, G5 i /* These pins are definition at <mach/mux.h> file */+ V. a* K; N- X# ?6 V2 l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# \/ g! a1 r9 i/ |" K3 Q/ I+ G -1
O1 X2 [( Q( w1 @! f' F* g};
; R1 m. Z3 P4 G7 N2 H+ O3 m# E/ B" ~0 U6 W1 c
static struct gpio_led da850_evm_tl_leds[] = {! _, e" a$ @. P6 U% L8 D! [
{2 L6 _3 k0 B2 q1 \# x
.active_low = 0,
6 n0 N4 {2 m: q- Q& @" y .gpio = DA850_USER_LED0,
( C+ S0 p: e- b .name = "user_led0",
% }2 D$ o7 n' H; U1 C9 g .default_trigger = "default-on",
/ A/ q+ V: U# R9 F7 d4 v },
) [* m% i1 ~& O) k {
+ d) o- o# U- s, m# { .active_low = 0,
# `8 b5 J- X7 B7 D x! L( s4 t \& m .gpio = DA850_USER_LED1,
% P1 h0 W2 Q9 R) u .name = "user_led1",9 g9 K% `/ j$ ~! {4 n7 J$ O
.default_trigger = "default-on",+ M6 C! Y ?1 `: e* y) f8 u* I* k
},6 t, D( I F7 d1 }( |6 G
{/ l+ n) E/ o& n7 @$ R# j) Y
.active_low = 0,2 L/ ^! V" L1 r& E4 v3 B% c1 l
.gpio = DA850_USER_LED2,
8 |/ S% u1 l9 A0 X .name = "user_led2",; P2 y/ H, ~2 s$ ]
.default_trigger = "default-on",3 L& i; {9 Y% r( j, R. V
},
- O7 Q. l$ `/ \& [5 I- } {
% J7 }* B3 {! o3 }* i7 Y4 Q .active_low = 0,9 l# G7 z4 G6 a0 u9 S; E
.gpio = DA850_USER_LED3,
$ ? g' Y) \5 ^( Z8 o .name = "user_led3",
3 W% Z, M% ~* u4 c* Z! a .default_trigger = "default-on",% P8 m8 b/ a8 Q6 x4 [5 ?! g
},
* J, a! h2 E- ^4 `7 o* q* u};
* v3 f" T) c/ e( V" k2 \; n: U# M- U8 p! D0 ~% g Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 }1 a$ S/ u1 w* N .leds = da850_evm_tl_leds,& F) A; s; e. e: Y; ?7 K" Z1 Y9 A$ I
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 K( n' N* u$ z$ b+ V};
1 X; D4 C7 d6 G5 ~
7 n& d- @; j- @% y5 K! jstatic void led_dev_release(struct device *dev)6 f0 Z# h' v3 { n
{+ h8 F) _* \7 O
};2 q( J, o; k4 O
e( R O+ D1 Q* v: V8 {' cstatic struct platform_device da850_evm_tl_leds_device = {
5 W; m& @ @8 V8 W9 s4 I/ q .name = "leds-gpio",- F) R: \0 |; L& W
.id = 1,
- P6 B, c: Y6 J% H7 b8 c ^8 O& g; Y0 M' x .dev = {
7 ^* g% S0 t- u" `6 w. D; V6 J .platform_data = &da850_evm_tl_leds_pdata,
$ n7 c5 r) c, B' H' e .release = led_dev_release,
; N" y: D7 B+ J& s% G3 r4 I' { }: G8 L- u$ Y9 \/ H
};
" b9 R, R1 x$ t- k5 i' d" a
* k$ T# V1 k- `: k7 ystatic int __init led_platform_init(void)
/ n m2 r5 \2 l9 f3 @{; I& q u( @3 ^. W0 [
int ret;. T: ]# p2 z0 Q
#if 0
, p- G, a/ [5 u* x$ Z# m4 d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: P7 Y0 d' G: e2 ?' L; Z- V
if (ret)
6 d B' q" t! D* v# M0 b pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ t$ ?; M6 z1 q u4 {; O* _
"%d\n", ret);
1 {3 I4 z9 {; x; | `! H#endif
( `- ^ r: F9 R7 ^3 L+ S, i3 I; [. l$ b ret = platform_device_register(&da850_evm_tl_leds_device);
) t; c, X/ D" X# H( I$ F( c if (ret)
) M: V1 P f9 A+ p4 l9 ? pr_warning("Could not register som GPIO expander LEDS");$ ^3 F8 V. y: v3 W" D1 C+ q
else' V) h& f& @; ]0 i& ?
printk(KERN_INFO "LED register sucessful!\n");1 m" Z2 m# k! @. \9 t& X! B F1 ~
& t$ e9 E! l' x0 B return ret;$ ~8 G- K% h7 Y# R! U9 n
} Q) G. e: h# o2 V& F$ a
1 ]3 [; ^7 a$ W R9 H. Y% E/ [static void __exit led_platform_exit(void)9 Y3 n: J2 V M+ N- z
{3 c; _) v4 ^6 N9 M. z* S
platform_device_unregister(&da850_evm_tl_leds_device);
; s8 j2 N3 g8 k% X0 n
9 R# W& M* O' M* u3 m; \+ A7 M Z+ u printk(KERN_INFO "LED unregister!\n");
7 G; \- k/ u! [, l+ U! B! b6 H}- G+ q9 ]. h$ ~, u3 [
, z% C* |! C+ G9 y1 y
module_init(led_platform_init);& S# C+ }- w0 s& R
module_exit(led_platform_exit);
% g# R6 ]/ ^/ F& O9 ]; g- ]3 ^/ e, U& a9 }5 Q/ c; Z) K
MODULE_DESCRIPTION("Led platform driver");; B0 w% y) C. G
MODULE_AUTHOR("Tronlong");' L) h5 r! ~7 P
MODULE_LICENSE("GPL");
& d G+ I" g% E6 P# t! d4 `$ O5 I: J+ C
|
|