|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 a5 ^# s, o: ]* q7 E* j#include <linux/init.h>: h: `. p+ R* t, e/ Y
#include <linux/module.h>" s2 y4 h0 S! c
#include <linux/kernel.h>
5 w4 ], Y& ?4 w0 G% Z3 ^#include <linux/types.h>
( u# Q: m4 S/ Q' l#include <linux/gpio.h>! a2 z7 \" o, i2 S6 i; g5 f
#include <linux/leds.h>7 S, p, k3 @! Q m- r) i' m6 T$ L
#include <linux/platform_device.h>8 O1 N: d8 p% U/ L) ? E) g: H
: H9 i0 c1 c: e( k4 S& Q% v7 P
#include <asm/mach-types.h>, g) Z# K# u8 M5 c
#include <asm/mach/arch.h>
% Z( x; H2 t) s% t( b#include <mach/da8xx.h>% d, H) l" M$ U- j
#include <mach/mux.h>0 d, [. h6 C# b/ D2 o" `
x& G5 E: @5 ~- T" X
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 H. c' W! p- O: L" x; S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 P: O" t$ z+ U' S) W. w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' Z. \% j3 }+ I* c- z, y* k! K#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ w+ ?$ |1 `8 R
6 P& c9 b$ [$ r/* assign the tl som board LED-GPIOs*/
f: n! Q1 y$ C( Xstatic const short da850_evm_tl_user_led_pins[] = {
' j! s2 q+ r2 O9 t; \; K9 ] /* These pins are definition at <mach/mux.h> file */
D* I$ ^- U- n) s Q) |6 u/ n/ ]! q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ C$ `9 N5 S* |% q: W) K
-1
$ E: p$ v# s7 @};
1 |: e! Z5 E6 {8 s5 _( D! J. b( j, L& R& u6 y2 }: P
static struct gpio_led da850_evm_tl_leds[] = {
( \: `( [6 @# h0 B1 f { k: D# |1 W! M# m" c
.active_low = 0,
' p1 U7 C3 R4 t" d. a& j3 J .gpio = DA850_USER_LED0,+ `6 c2 i1 y# R" v) G2 D. D
.name = "user_led0",
1 q0 ^1 l" B4 T0 i4 H .default_trigger = "default-on",7 ? E5 @3 R% B/ ?' @5 Q& o& W
},
7 ?9 D+ ]2 }" e% A {
6 C7 {0 l! U3 ? .active_low = 0,
3 B# F0 d: t% w/ U7 L .gpio = DA850_USER_LED1,6 r5 i. F% o4 N8 Q7 x
.name = "user_led1",
( D' [. g& f& m. D' v .default_trigger = "default-on",% u! {% W. R* F5 d5 C1 f
},
9 q% {" N( j8 q4 _: q! C7 f {6 K2 u0 s5 y j' A
.active_low = 0,: J0 H, t& X2 i0 X
.gpio = DA850_USER_LED2,
' S4 ]& V8 W. p/ Y- G1 Y7 v3 V .name = "user_led2",1 l6 w1 P. H' x# j' N
.default_trigger = "default-on",/ F% @1 G3 w4 p/ y0 D4 I- o' c
},4 r# t7 p5 E: H2 s& p! w" d5 u
{
* l% r) Y& V% q; o8 A( F .active_low = 0,
5 b8 `5 q3 L4 M9 Q) K .gpio = DA850_USER_LED3,
9 G. N! x2 C" s6 e: q" S( w+ c! I' y .name = "user_led3",
7 l$ `) _3 c B3 E .default_trigger = "default-on",! D, }1 F, w/ [* q0 }$ T
},6 J$ y( [; C d; {
};3 [/ v2 r" F3 z2 q }5 m+ Q9 |; w
+ r8 z. H6 p9 v: Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 U6 y, }! r0 C+ U3 o! v .leds = da850_evm_tl_leds,
6 ^" o& G. q, P- f0 k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 }# L8 Y9 B2 e};7 z) m- }) I6 t
) a& \: K" M# [, B& y0 q6 i+ o% z2 s: {static void led_dev_release(struct device *dev)
: ~7 d# ]1 w: C8 ^{; G* i, Q! O/ h" w
};
4 O0 h3 D- U& ^7 v8 m5 `& A9 L4 y+ k; D" ~ A. F
static struct platform_device da850_evm_tl_leds_device = {
1 q# h# Y/ }8 ~5 I, h4 l F .name = "leds-gpio",/ U+ `: w# h7 q. J/ Y
.id = 1,
# i6 ]9 d+ z) G1 e .dev = {
\( W; y& L3 |; E: a8 T, c .platform_data = &da850_evm_tl_leds_pdata,; V* m1 T; V) L
.release = led_dev_release,
( B( |" ~, H) m! ]% K! _ }
* r, C& T! j3 g, F" o$ B c% F& A};- b& g% B! |% E# k
! j" P. v5 I9 v, f( G) Z/ h
static int __init led_platform_init(void)) n: I( w5 f. l, a# j
{
7 P8 ~8 u0 ~4 Y9 O int ret;/ M' q" `' Z) ?! O& g8 Q
#if 0
& c) |( z! {3 k( x8 O4 K' ^) u T# c K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, Z+ B* L+ A* S0 y4 L8 M1 [ if (ret)
4 ]' m: d* S% `; v0 U+ \ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 d. J$ J7 n2 U4 Z "%d\n", ret);0 G6 l- w' I* H; h( p- F* E/ ~1 x6 J
#endif: O" w! [$ Q) J4 N& K
ret = platform_device_register(&da850_evm_tl_leds_device);) Y! ~9 C# H3 M4 y5 U* D
if (ret)
8 L. {$ a( Z( S3 O1 ^* T T; K pr_warning("Could not register som GPIO expander LEDS");
6 n9 G+ D r- T& |" U5 a else
# S1 o. A) r9 T3 D1 l- u printk(KERN_INFO "LED register sucessful!\n");
* x& T6 `3 p1 q% q4 D' \5 ~
/ Q' o/ W4 |2 e return ret;$ }* Q1 y! Q" h7 [
}: y$ Z/ v) x6 V8 B& Z; A
* H8 R1 {6 Y) l9 ]2 xstatic void __exit led_platform_exit(void)
- X, `5 e3 C% R, T{
2 y" W/ s3 O9 J. w, b, ] platform_device_unregister(&da850_evm_tl_leds_device);
& d1 k1 q' A; C8 V5 _0 r& A0 ~ I+ j) s4 Z. n& S1 \( ~/ j
printk(KERN_INFO "LED unregister!\n");
2 t6 [6 c( ~8 g" f- |6 |}4 Y- b1 t0 H5 N; L ^+ @1 T' G
9 M, w" C, M; X$ lmodule_init(led_platform_init);
* U; R) b+ q/ i K% q* o, @* Emodule_exit(led_platform_exit);
5 c$ h9 G' S. y' ~- }& Y1 x6 X% u7 `4 Z- h- b7 [& W
MODULE_DESCRIPTION("Led platform driver");3 d# D0 ]: M A8 ^# @6 A1 C
MODULE_AUTHOR("Tronlong");
* t- M6 B* V, V! \8 VMODULE_LICENSE("GPL");
& v- P5 k$ s: F) O& |/ \4 |; b2 E
4 {7 K2 y1 z: B+ t |
|