|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 U; `7 W s" x#include <linux/init.h>2 m: P8 g! Z3 N0 j
#include <linux/module.h>
) B& q+ Q" Y% w: o5 ^) R#include <linux/kernel.h># M: ^' s: l3 v8 x' s( ~5 W* ~4 L
#include <linux/types.h>2 w$ V4 B4 j0 e% c/ ]
#include <linux/gpio.h>. B/ q- z. K$ C
#include <linux/leds.h>6 x9 E7 p9 x6 v% i! J, }5 C/ V
#include <linux/platform_device.h>+ c% L# o& r2 y ?( I6 _
7 X/ Q H# G* o; L, a1 d3 ]2 g* C
#include <asm/mach-types.h>5 A0 r0 B1 a3 ], \8 m; Z; y" A$ J2 {
#include <asm/mach/arch.h>
3 r7 s2 `$ N0 w, N* ]#include <mach/da8xx.h>
5 ]7 O+ v8 L9 }4 l" d$ C#include <mach/mux.h>
( S+ P2 C, V6 ~& l1 a4 Z1 a {; q% {! |* O7 F S2 G0 c x4 S
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 ?" t z2 T3 Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- c) n9 k# h. O
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) s5 \7 A! e t
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# V% T: y1 f% K. o9 T
\ U3 B) h6 X& x3 s& N4 `1 Y- T F& S
/* assign the tl som board LED-GPIOs*/
/ Q3 e, `8 L2 q U0 K$ {0 Tstatic const short da850_evm_tl_user_led_pins[] = {
9 i7 L- E+ F4 r; ]" ?( \) q" z /* These pins are definition at <mach/mux.h> file *// A/ {& O) w6 z2 P; l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ \ `6 A6 ]- b$ K5 T1 N5 {
-1+ f7 O3 {0 T1 \4 H( \( ]9 O4 K
};
% c0 X8 S! h0 i) |, M( Y! j
0 B# ~7 e! ~! D/ I" \+ c9 Z7 Zstatic struct gpio_led da850_evm_tl_leds[] = {# e D& r& F- q G
{
6 n g: t. V R A .active_low = 0,4 ? o" @' ?; t/ q( \
.gpio = DA850_USER_LED0,* J7 R, A- G) ?4 q' a, J9 J; w
.name = "user_led0", F& h, y; Q9 z7 ]" X1 ~; }
.default_trigger = "default-on",
~2 ?7 v+ ]( V R- ?0 R },/ L" p6 u0 P- A3 \! ~8 y
{- w2 K: i$ ^7 }5 H! l" d
.active_low = 0,9 j- C. b- n; @8 v% r! A1 |+ _
.gpio = DA850_USER_LED1,
* E# x$ t" f8 @ .name = "user_led1",
( v6 L2 g9 R/ x. {, d .default_trigger = "default-on",
o6 n8 t: b5 O/ p8 B% d& X },% S- A+ N9 |4 m# h
{
: R: c5 j0 D) _: E, l/ v .active_low = 0,! ^5 ?. H- j) y7 \
.gpio = DA850_USER_LED2,$ G. W7 n* U; u2 |' M
.name = "user_led2",
; A( r# q; C% p9 W" b! L! W .default_trigger = "default-on",
5 E b, S4 B* a/ W7 w+ Z- b },
8 D& U! o+ e4 \1 M x& @ {
/ I& Y/ ^& v7 K2 |/ x1 U" ~! l .active_low = 0,% A( F* b6 c/ \2 Q2 D
.gpio = DA850_USER_LED3,- f& w* F8 T; S2 e5 k& S4 M
.name = "user_led3",3 T$ S6 t( g3 q3 S' H) X @7 E" `
.default_trigger = "default-on",
% I& i: F3 j& o },
$ U. x% `% J3 S. Z& ?% v}; }: ~5 O9 |# P
( x, E/ d" @6 j d* w8 Dstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; ?% i# \- Y4 n& i .leds = da850_evm_tl_leds,) I( w1 i7 w9 \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" B: e' S; s( m};
+ Q6 o: f7 F; o1 [+ Y4 j3 @
( \5 J3 u, ~3 i) T, G, ~3 {static void led_dev_release(struct device *dev)
) p) b" }/ i% B* {1 o7 h{
; P$ d% |' K; n" ?};
' f) w" `8 l1 Q1 l& E; S
# A1 z9 O6 ?) q+ Pstatic struct platform_device da850_evm_tl_leds_device = {
, h1 A; A- x/ w9 @ .name = "leds-gpio", S5 H1 u* u8 j
.id = 1,3 ^9 N8 u( [, g; k; s4 \0 T2 f+ b- W
.dev = {
8 X7 j' K9 ]/ { .platform_data = &da850_evm_tl_leds_pdata,
+ B) b4 D9 |& n% }, W' G4 S! M .release = led_dev_release,: d' x; Y: J, p5 G& }8 Y6 ?
}: u1 T) H- B$ e9 J/ ]/ h
};1 P" I4 W) y3 x) K9 {6 A( M
7 b! x/ U8 A6 C. T9 j8 Kstatic int __init led_platform_init(void)+ d4 I$ V, e8 R6 V& X
{" o! h1 z! U) d3 u# D. V
int ret;
. \4 o# j" n3 o, Y& T' r, @#if 0
4 T) R* p6 e- _5 G5 k7 d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 u* R5 o* R7 n9 C
if (ret)1 U! X* A9 _3 A" W8 V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& Z# |0 i8 T4 C. l
"%d\n", ret);: ?. p, ~* P' A) q
#endif/ L$ W( H- U; ^$ O
ret = platform_device_register(&da850_evm_tl_leds_device);# S; m- P( h4 i8 B2 Z& O& \
if (ret)4 o( ~4 i9 s( | C* X; u
pr_warning("Could not register som GPIO expander LEDS");- ^/ c4 Y/ Y, y0 k$ _. W0 r2 ~2 A5 z$ N
else$ M: ?4 v# F1 N4 }" x
printk(KERN_INFO "LED register sucessful!\n");
. {" Z5 M$ Y. N% b
; T& U, n& T/ _3 @: x3 G return ret;
1 D: s- o. i$ x3 S Q' w/ V}
6 Y: M+ k+ h6 a7 {* G# e& t9 N
3 t* B v1 V5 B, P, p8 l; @+ rstatic void __exit led_platform_exit(void)
( h$ t5 L: F, y1 M{8 c$ z( o, F9 Z0 s# \
platform_device_unregister(&da850_evm_tl_leds_device);% p2 e% J; U" y: W- |5 O. }
* ~" p4 O+ W5 O6 n printk(KERN_INFO "LED unregister!\n");
# e9 m9 j( X% t1 C* a$ }' g3 D' s}1 L( x0 ]! P V) K! T6 U1 u2 t
9 ?/ Z+ D" u+ k/ x# a) J6 M& Y$ M
module_init(led_platform_init);
, D- i7 f2 A4 z: z& {( H' ~module_exit(led_platform_exit);2 F) X! R1 P9 |# S
$ Z! p$ N0 ?4 x& FMODULE_DESCRIPTION("Led platform driver");6 d/ T* S0 } K. H9 w
MODULE_AUTHOR("Tronlong");5 a2 v# u f4 W0 y* V
MODULE_LICENSE("GPL");9 o9 p9 M3 [7 I1 h
% V% J* V* b- A5 n% x% [
|
|