|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ c6 Q$ ^" K* @! O6 @$ c
#include <linux/init.h>
- j/ X; A9 d9 e#include <linux/module.h>5 p' h3 s) i6 ^
#include <linux/kernel.h>. x6 k% G8 x* F% J' o" }+ o/ {
#include <linux/types.h>
- v# [/ a- ]6 f( [5 X#include <linux/gpio.h>
4 K- Z' d5 D0 m% x2 T#include <linux/leds.h>5 j0 y1 z9 [+ N9 ^6 T/ L
#include <linux/platform_device.h>/ n. {9 q5 |' X. s& v: q- I! x" k0 e& }
. ~& ^1 f5 d5 K! b# |1 _#include <asm/mach-types.h>
( \8 |& ?3 u" |) @#include <asm/mach/arch.h>
0 j% d& N+ U* l1 x0 `' V#include <mach/da8xx.h>
- d" G1 M# U: {3 ?7 `, l#include <mach/mux.h>
) x8 i, @6 @5 W5 h% I
1 D% Y! N8 J7 b, g#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' v# q6 r6 s; M* y2 s% X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
S/ ]3 ~4 c; d9 Z5 v6 K$ s#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), z4 r" z1 A" M' M& J) z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); j- R: u0 J: M+ X, F$ R
% l$ a8 k5 z" o4 r/ f6 c' y' ^
/* assign the tl som board LED-GPIOs*/
2 q; B7 q9 U8 a2 b4 S# ostatic const short da850_evm_tl_user_led_pins[] = {4 Q4 A0 ]; M- n: r$ {$ c4 W& J
/* These pins are definition at <mach/mux.h> file */6 e( ~2 q3 x, _& ^7 {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, X: G8 I1 p k! p( J+ ~
-1
/ C) E; {0 i* ], A4 U, M# t};+ a) L0 {% k \- G9 ~ A
( ^8 U/ M. A% v/ E% e& h/ dstatic struct gpio_led da850_evm_tl_leds[] = {7 i j/ X& F2 X* Q( _/ D# ~
{
8 H7 j+ T. Z. y .active_low = 0,* F% M# _' N1 f* e' ~
.gpio = DA850_USER_LED0,6 D. |! Y' \& I0 K B
.name = "user_led0",- B. @- {* f% p# E1 Z6 e2 N
.default_trigger = "default-on",
: {8 `# ~; ~0 v. z },6 p/ m" D& S: k3 }6 Q* Q: U
{# E7 ?1 a) }2 g% m% g5 g
.active_low = 0,( O- a4 }# {0 d% t. \7 C
.gpio = DA850_USER_LED1,
: l: S1 U6 s# @7 k* u: T6 B7 K9 J .name = "user_led1",
2 k4 v! }: ^% ]( b: ]( x& ? .default_trigger = "default-on",) H" G& i8 [- d5 H
},7 { n/ a9 C, M* `; S8 B$ F
{% G; e) ]0 Q5 X1 b
.active_low = 0,5 |$ M* ~2 \+ U5 v& I
.gpio = DA850_USER_LED2,/ y1 R0 P. o; b. L8 G
.name = "user_led2",! c" E5 H8 H9 S6 N p
.default_trigger = "default-on",5 {% \/ Q8 `( T1 }( ~/ W( }* K: x
},
0 G7 x( o: t* L3 @3 P/ C+ k {1 K( O0 q6 [: q/ W5 M: u1 ~& [8 [
.active_low = 0,. w0 } @: l F5 X; m/ A
.gpio = DA850_USER_LED3,1 ]+ y& P* D4 B- ]! {) E3 i
.name = "user_led3",
& m3 m( P% h. e .default_trigger = "default-on",
3 A* ^# g( B% e6 | },
4 C' X0 k% `" F9 l};4 Q; U8 r& h( F& m
; [0 J4 W" S, e, R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' u) | a. u _) P. X( E
.leds = da850_evm_tl_leds,
% C# |" |% W; V) E# R/ p& I .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 e' E7 S7 P& L- ^. k4 _
};: D) v1 |) d+ P/ V
, N& ?% {% U2 S5 @7 C" C0 I
static void led_dev_release(struct device *dev)2 I3 A% E& h) r7 H) G
{# D! k. C3 p' ^* @" M7 _+ o8 R
};
- E6 r* X7 V$ W0 B3 U( O0 z% |6 R: v# V& B$ X9 l, r
static struct platform_device da850_evm_tl_leds_device = {
. }/ u4 D! p7 e: _# y .name = "leds-gpio",- ]% A$ V3 ?4 O6 q/ M0 ^- G
.id = 1,
: x! H e: L% h! D. k) Z, Y( g .dev = {6 z0 [7 S2 s. k3 _' P/ `% s
.platform_data = &da850_evm_tl_leds_pdata,
* D$ L% j: R. G- ^ .release = led_dev_release,
; Z0 N/ H2 W; o4 h+ O }
7 P. K: e4 `: F};; w$ M a' N7 }$ }) i
5 f, J4 i6 h8 K# ^) }1 Ustatic int __init led_platform_init(void)
: Z/ I; K/ f) l: r{
- I* r. p& h: Z A: X int ret;$ Q# G' R4 u7 y
#if 02 s/ e3 O0 o$ p- e- f. E
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# R4 F' M9 g I- d/ Z! i if (ret)
$ P) b% d( _* k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! O& T' d' H" ?7 h
"%d\n", ret);
# z6 C1 h( N/ O# y' A) _0 E#endif- n! g _3 A+ _3 B) b- G9 {3 A
ret = platform_device_register(&da850_evm_tl_leds_device);; ^( Q. p' C5 f* M! s/ e' P) r' L9 ~
if (ret)
& K7 u7 [4 _) u- M+ o/ g' j pr_warning("Could not register som GPIO expander LEDS");) m6 X T2 P9 i, z! d7 U. H4 O
else2 \3 e$ b: k. ?- e( ]
printk(KERN_INFO "LED register sucessful!\n");! L4 r; q& R$ t- i% x5 k
9 t, Z" l% y7 K* C! Y, E return ret;
9 _3 I( N( N" m}
* m& E$ p( X+ F8 m* g3 h" Z( [2 h; W7 [0 B! r& H) Y5 P
static void __exit led_platform_exit(void)4 ~7 m' e0 y y+ o- ^3 t
{
% E% e# y' S- L6 J* z" \ platform_device_unregister(&da850_evm_tl_leds_device);, D! F/ c' c% H
0 d9 M1 v J) \1 o2 e
printk(KERN_INFO "LED unregister!\n");; ]+ L; ^) q# c' I0 V
}
1 y' Z& ]6 G G- F! @' k7 X
1 F1 V. Q' E) }: S# E; m3 g9 m( |module_init(led_platform_init);
+ O' e) {3 `8 I$ ~module_exit(led_platform_exit);6 [, U L1 @% b
; s+ G0 J! A9 l! Q- f/ P
MODULE_DESCRIPTION("Led platform driver");
& [5 ?) f4 d# k3 |MODULE_AUTHOR("Tronlong");
% ~0 p0 T) W+ d% R1 TMODULE_LICENSE("GPL");
5 B: `% P* h: _: W/ x- T ?0 s/ s3 P1 y
|
|