|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: D7 y h- J k; \
#include <linux/init.h>& O, N4 Y$ ]/ S! }2 e; S, H
#include <linux/module.h>
% t, n% T7 E) `#include <linux/kernel.h> ^! W2 ~6 p* ?
#include <linux/types.h>7 i( k3 k& I8 k$ G. R, j& y
#include <linux/gpio.h>3 W& O9 K" e3 _1 }+ d+ Z& R) A
#include <linux/leds.h>
' T _$ l2 D; |- w3 q#include <linux/platform_device.h>
1 C/ c: X0 }) J9 |/ v6 B6 {# i+ |" I9 i! ~1 K _& m' j- j
#include <asm/mach-types.h> v$ J) P' O+ {7 u- Z
#include <asm/mach/arch.h>% @% p; n( Q! Q4 r0 r3 b
#include <mach/da8xx.h>6 S U* n* a2 M! d
#include <mach/mux.h>
$ R ~. n( Y& h6 O6 ~+ i$ i$ h! p% l" A8 M2 o
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. ^$ u. e. m" `& v#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 o- v( I3 q* k1 o6 [+ I
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* {9 f/ ^7 S# H5 o0 G" C% B1 T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# X8 M9 }! d4 ^! T8 o: h6 }! a' d _8 t2 r6 m
/* assign the tl som board LED-GPIOs*/9 r- `0 F3 T8 G2 ^! t; {! K& O
static const short da850_evm_tl_user_led_pins[] = {6 F" r9 \! j) q5 i) \
/* These pins are definition at <mach/mux.h> file */3 _" R- |2 N! C9 h
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( o( M' ~3 j( t -1( W0 A! M% G3 c- G
};3 l* }' l$ j' m9 [/ n9 k
7 u+ z% S2 p+ X" }
static struct gpio_led da850_evm_tl_leds[] = {8 r1 `5 O; q5 r- ~
{+ v4 s+ H: z* j8 U" B2 k4 W+ F/ W3 Q
.active_low = 0,; }3 { N: T6 A( V5 N
.gpio = DA850_USER_LED0,
8 C0 Z) ?( i, ~) _ .name = "user_led0",
* V7 l. h5 o" i/ q6 Y" m4 R, F .default_trigger = "default-on",
6 @7 ?2 H- q4 g' M! r2 H },& i" w9 \. ^: G' S
{8 H, W" R' C4 \4 [$ N
.active_low = 0,4 `+ s7 Y. d. q( a: k( J
.gpio = DA850_USER_LED1,0 L9 u) ?; f3 T& y& @
.name = "user_led1"," r4 ?% k2 U3 r8 s5 h
.default_trigger = "default-on",
\& M( O9 t; u% g( Y& l5 f v },) k' a0 m' l5 j M* J
{
8 `, n4 K: F* ` .active_low = 0,, h! O1 c: @" R+ d* a0 J5 Y
.gpio = DA850_USER_LED2,
. K/ C/ T. D, s7 O; M5 P .name = "user_led2",
- X L& }2 `( r3 X( ^# p. T' X3 H .default_trigger = "default-on",, \' I: m9 I) {( e8 a: G9 ?
},3 Z; v0 P: _2 @8 M
{
* E& h/ h% E$ r" Q8 a) O! h- t* T) q .active_low = 0,3 F1 D; z+ B+ @! C* j! R; [' A% N
.gpio = DA850_USER_LED3,) B' ~' G0 B, H$ q
.name = "user_led3", m8 I1 W" X6 P8 n! p
.default_trigger = "default-on",1 O. I/ |* V9 Y! T0 Z
},
9 U6 s$ _: g: ]; i" b7 Q* F8 O4 O1 f};
4 \* {2 h$ F6 p6 b. H/ w6 p) ~& @, K- o E& f
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. R9 `7 ~6 y4 \5 y& {: P .leds = da850_evm_tl_leds,
1 s6 o- k! Q! b& K1 A .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, i+ v7 Q" ]2 W- R* \};4 B: p. i6 l7 R
3 I2 X+ M5 ]2 N3 b7 Q
static void led_dev_release(struct device *dev)
5 x- {) u2 X" h1 e' _/ ~$ E8 s{
+ i5 P* k: N+ U n7 `};
4 W8 ^, ?( `& L' P, Z
0 g5 u, D4 x9 n9 Y2 C1 O/ _' nstatic struct platform_device da850_evm_tl_leds_device = {
8 J/ C. K6 f' b& k6 o/ ^ .name = "leds-gpio",
) \( l) E; g( j: ]. y- N- D .id = 1,
/ f: W, b0 @2 r8 u! y .dev = {
2 \) @7 m" k# e& V( m" p* u6 v .platform_data = &da850_evm_tl_leds_pdata,
: k( B5 u( q8 h4 X9 E+ Q" E9 Q8 L% [ .release = led_dev_release,* G5 W/ D# A, u
}
/ \7 B' i) e+ P0 O0 B* ~1 f};
+ R4 Y, K" j7 ~8 } C: S: k2 r! i3 p$ K. u% P k) W+ l% ]% _- P
static int __init led_platform_init(void)
" }* d/ u0 }/ N) I; c5 g# }{
# ^9 |* e5 i7 l! m- m int ret;
! i7 @& u. Z6 t/ V) t5 ?#if 0# [- x+ |6 s/ V! U; I# g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: o9 q# c: c# C' ?
if (ret)
4 a4 X. e( e& n7 d p' p U pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' x' b+ l# v4 h0 J: B+ A* l9 g( N
"%d\n", ret);1 d$ b( i# B- }' M* @; G% P ~/ J. b
#endif) z! u# r2 j: S
ret = platform_device_register(&da850_evm_tl_leds_device);
7 `$ e/ I) b4 ?9 }) T7 `0 S if (ret) `" G, o- \8 m+ c S: X
pr_warning("Could not register som GPIO expander LEDS");# b# s' _. I3 ?
else
5 i, G+ a- D: G5 i( Y | printk(KERN_INFO "LED register sucessful!\n");7 u, e! Q$ Q* ~4 [
# k6 T6 `* |1 o- x
return ret;
: c4 ~1 N/ W- D}: w% P, q6 F: f8 O; e7 s
- b; B, n" \" W5 o, `2 o
static void __exit led_platform_exit(void)( e- j& w k5 \. o6 D; H6 j
{
+ I ~) z9 ?( G( _, b5 z# ?: s platform_device_unregister(&da850_evm_tl_leds_device);
; x( {9 V( {, e r1 U. _/ }7 y0 b; g6 E- u6 b0 {1 Z
printk(KERN_INFO "LED unregister!\n");
6 c: Y) i: n# ]; B}
( Y5 Z0 m7 m/ S+ O. a5 N
% J; [8 S. h$ }module_init(led_platform_init);
! w3 @+ u0 g n' Q& x( qmodule_exit(led_platform_exit);
6 C- |& Q8 k. F) O, ]
9 b3 y V9 B" |+ ?" H# kMODULE_DESCRIPTION("Led platform driver");. h5 O, p1 n- W$ Y
MODULE_AUTHOR("Tronlong");
G" }2 C0 ~+ _7 z" \MODULE_LICENSE("GPL");
6 _! [" h! T3 H2 t4 a* f* C! {* n% F1 }' |; T% ?2 w9 Z# S
|
|