|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 @- q7 y. B% }) u. j
#include <linux/init.h>
7 b( N5 D' I$ z#include <linux/module.h>
2 Y0 Y* b' J1 R, E; v#include <linux/kernel.h>8 E9 B4 k& t$ v `% h( ^
#include <linux/types.h>
: h/ V& |) w9 g" s$ O, v#include <linux/gpio.h>7 G- c/ O) M, h! {- B/ y$ @$ D
#include <linux/leds.h>6 N1 x9 f! U; w7 l* E, g
#include <linux/platform_device.h>! O0 j% x0 Z% a. Q
8 p; R- w% |, @5 B) o
#include <asm/mach-types.h>, c9 j1 N, x/ h- C! n1 }8 K
#include <asm/mach/arch.h>* [8 E! j# w+ s& }
#include <mach/da8xx.h>
0 W3 |* r2 K t% W' t5 k8 [#include <mach/mux.h>
! _$ \. M; S1 C
0 p* I! \/ T* A1 j0 M$ d6 R6 {#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) w* i5 i9 M% \" N" S, i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) {" _" I k0 j* Q% k2 P S- _0 @* A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 v8 ~) u9 e# ~2 |! h% `0 ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- G1 f% m6 T, y" m' m" m: X
( V+ B+ G$ v5 j/ d( X/* assign the tl som board LED-GPIOs*/3 o5 m' U- L! C. _; P
static const short da850_evm_tl_user_led_pins[] = {
. h8 i) U7 w) I! i /* These pins are definition at <mach/mux.h> file */
& m3 ^ G0 }( n+ T) W. g4 o5 \9 Q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
n5 E1 Z1 `! L3 X# `) J -1
) ?# H2 A. v; \$ x A5 z};- ~4 k& |* `* H; g
7 c1 r3 L/ _$ Q, `
static struct gpio_led da850_evm_tl_leds[] = {
9 c5 l. d G% v {; b/ p+ H# |6 K. g
.active_low = 0,
/ S: q1 p* b+ J6 D$ B& U .gpio = DA850_USER_LED0,
+ f% e% J/ Q$ _ a7 { .name = "user_led0",' b) a+ e$ s! i1 N$ \ L
.default_trigger = "default-on",
- e, t& r& f: D$ Z6 y },
( f* d! i& m0 K) B3 O0 `0 z( D {: g- u) c5 p$ K! H/ u
.active_low = 0,9 Y2 ], |+ P+ Z# O
.gpio = DA850_USER_LED1,
U( v" T: b8 P4 q .name = "user_led1",
, S/ Y" u \7 t .default_trigger = "default-on",
! f& X$ X: u2 j* L },
. k6 l) r. n% y- \ {5 a, ~5 \$ p1 u# P' D: c1 Q4 g
.active_low = 0,
, ^9 \$ A, Z; t, C, M" K$ o .gpio = DA850_USER_LED2,
/ X. v( q3 ~: X8 X7 d, d& | .name = "user_led2",
2 t2 f% {6 L8 G ~( c! ~' X* N1 ?: a .default_trigger = "default-on",8 S$ c& Q9 g' e2 K7 s
},
6 w0 H9 [! h1 A) L1 Z2 P {
8 E& y+ v. ]: H7 H .active_low = 0,2 a# R" R' e+ @% H0 S# T! ]
.gpio = DA850_USER_LED3,
3 F) d! y U) _& J7 M6 ? .name = "user_led3", ]6 V! r! T) b' e
.default_trigger = "default-on",
+ h9 X( n: u7 p; Q# O },/ ]( f5 P' X& x5 E- n* T5 {7 s" G
};9 q& _0 X2 @/ Z9 g& Y1 ~
9 A4 C( ?3 C/ y5 @% l3 [: Q; i4 ~
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& ?( \ x& ]$ q1 D' C5 d
.leds = da850_evm_tl_leds,; z6 p% n, c6 t1 m+ B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. n6 I7 T- o0 d% j# k V: F
};
, }) {4 L, T. |- Y( i- D0 y8 _$ x! d. |. q1 ]
static void led_dev_release(struct device *dev)+ M: M" k* Z% e. a1 f
{
* k: H4 h$ w$ z7 M3 y& c};- ~' Z5 p* q5 O1 r1 l* S* W
0 j; }+ }7 z2 A i! O, U; A9 y$ @: nstatic struct platform_device da850_evm_tl_leds_device = {
M& W7 k6 h- d' {9 ]+ Q" v& b .name = "leds-gpio",+ r, T2 p6 u) @
.id = 1,
: o( z- V4 t+ T) N .dev = { D7 ^% b0 g9 F2 \# Y8 J
.platform_data = &da850_evm_tl_leds_pdata,
+ Z. B9 Y' B; n) w) R .release = led_dev_release,
# L3 A' U" n6 L7 h }% [' V7 A. }' [+ V2 K" L# r
};" H6 M# G4 z5 ^. O7 S
4 f0 Q# N Q. b3 gstatic int __init led_platform_init(void)
8 ?# S! z$ j$ o7 R% z{- Q1 z. p7 Q1 a9 f& s3 u3 ~
int ret;
6 P) a: B+ Q( b. \4 T2 V1 ^" @' B#if 0
. F/ k( V: k+ Z' T0 w) g7 J ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 G7 o2 S. g, `# G d r* W# @9 F$ W% e if (ret)
4 O6 t* P5 ^( z/ X! }- l4 ]# z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% @: w' t9 C; s. I "%d\n", ret);
3 b; I# b' L( s% |4 u/ ^#endif
9 f$ V0 u7 l+ P ret = platform_device_register(&da850_evm_tl_leds_device);" h; _1 v& X5 E: S8 x- C
if (ret)7 p/ s8 n) f+ D; u& _' Q
pr_warning("Could not register som GPIO expander LEDS");, d0 `5 ~5 _1 Z
else) `& h# z. X: f- d# O
printk(KERN_INFO "LED register sucessful!\n");1 e7 g7 Y3 U7 X
6 V' Z p; @% ]0 s
return ret;
% A- z# o7 X. @% R! \}
. G& ~+ m+ W& K* w5 b: a5 p% B
& X9 H3 j8 n( F$ p5 t* Ystatic void __exit led_platform_exit(void)! @% K0 A/ Q* K1 [* Y9 H
{
1 S) }* D& h6 }" o platform_device_unregister(&da850_evm_tl_leds_device);
3 z5 ^+ P. z8 t2 ~7 A5 A' C" V. Z
6 b, ~4 e$ [/ B# B( @6 M5 h/ J* N2 E/ G8 o printk(KERN_INFO "LED unregister!\n");/ E- R, e( w/ a& N8 v
}8 i! G. o$ X6 i1 w$ n
! G1 r( j' y2 ~
module_init(led_platform_init);, L) u: A1 U7 W! S
module_exit(led_platform_exit);0 A. |* k: [" \( [ I1 z
4 e- \% m! ?- ]8 M& |7 ^MODULE_DESCRIPTION("Led platform driver");
/ O; T/ m% L- A* H# @* a: I# \MODULE_AUTHOR("Tronlong");5 y" i- d# z8 [' Y, t2 [
MODULE_LICENSE("GPL");
0 L( l" t, A9 f7 \% M) d5 u6 N- t' b1 X m* ]0 @8 {, r: d6 [3 P7 Q
|
|