|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% S2 d! F. [0 V, J( L" L
#include <linux/init.h>/ `: M! g9 X. `2 p: H" o( C J4 Y( R
#include <linux/module.h>) N+ p5 G5 d5 V% @
#include <linux/kernel.h>
* j, @8 V7 v( L6 N F) H#include <linux/types.h>& D/ v( ]: q/ y! C8 T
#include <linux/gpio.h>
2 ~4 n+ k. c* Z2 E/ d#include <linux/leds.h>
5 R+ H* K. n4 _' W' \/ T) j#include <linux/platform_device.h>; T2 D3 g$ `) {' ?) y2 b
- d8 w0 Q' @5 r1 |" ^- h#include <asm/mach-types.h>0 A, _# k2 F& c6 P. W
#include <asm/mach/arch.h>( E; L7 Y7 u: L1 {0 u
#include <mach/da8xx.h>
& U% N" B, h7 @#include <mach/mux.h>+ v' Z0 \, H" f% H4 T |
5 `( v% A5 w* u9 o5 K#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 c& j- \+ F4 @) U
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ n) `8 L s! W) c#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) v9 j' G9 q# h5 q/ Y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) I9 M6 F) Q3 Z8 E
% L2 y5 l$ m4 ?, D' [
/* assign the tl som board LED-GPIOs*/" v+ [2 m8 d- U. q& j
static const short da850_evm_tl_user_led_pins[] = {
' m5 \* n4 w9 o/ g. y1 N4 i4 \ /* These pins are definition at <mach/mux.h> file */" O9 u B, C" `/ I1 `* d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ ~4 \9 M6 k) [% Y' b8 X8 m
-1. R6 r/ @4 m9 c( l& C
};$ w4 a/ i/ G& k6 U3 F% ~+ C
2 V+ F \+ D( T! U# R
static struct gpio_led da850_evm_tl_leds[] = {
) b% r/ s5 E8 d T H K. n {
# J5 j* {% s) l: b6 P3 o" ] .active_low = 0,3 A0 K$ q7 c# x8 ~4 ^9 Y9 j
.gpio = DA850_USER_LED0,
5 B2 ?; r: k E5 U' X) C" R9 y .name = "user_led0",2 b3 b3 R0 L$ M* p& V( T& m
.default_trigger = "default-on",& \3 N/ l- i+ \
},! {4 w" |) l9 v1 o
{- g5 G$ {8 Q8 q9 l
.active_low = 0,
* b# v8 f( o" R+ J3 N1 C! k& e .gpio = DA850_USER_LED1,' s4 s* C* |4 O Z0 c. g
.name = "user_led1",* u+ ^: N/ t# ?" C
.default_trigger = "default-on",( {$ N7 ^9 L7 q U
},$ b( D' a5 q w1 A
{
L5 m9 E& x' ~ .active_low = 0,, b+ a# v0 k' r2 H
.gpio = DA850_USER_LED2,
9 S' _. [6 L# N1 f; D .name = "user_led2",
5 p0 \ h# V; A; }/ n .default_trigger = "default-on",
$ E6 k- o3 S0 W: w4 H: D },5 m) z" l& M. K6 k f8 g+ D
{5 H5 k- U7 K# v
.active_low = 0,. n; N( ~# n* e3 [" r" e* o$ D4 E
.gpio = DA850_USER_LED3,4 L& h& a, ^. N: t+ m% [$ f
.name = "user_led3",& I; B* f; w; |. }* D
.default_trigger = "default-on",
# s t2 F# L+ L) b, O% }$ k; { },# _, X7 {' V7 v; U; f
};
2 [2 n; s4 A: r- P0 U' G. |
6 F) F" u7 \' K$ f5 ^& cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 Q6 i0 z9 U9 b. a0 N! u' { .leds = da850_evm_tl_leds,
+ A2 H7 U, ~3 E- E5 s0 x. u .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 S7 Q( X# x8 n$ Q# s! v};
0 P8 Q: ~" C0 L! q2 _! u5 J1 `
b4 p, Z" q/ ?8 J1 I8 n2 Cstatic void led_dev_release(struct device *dev)
5 r8 q) g1 I. d) u" I# U o: B2 ]{
4 I, B8 P0 o' y2 l: [3 X0 t [7 f};
. Q8 q3 F/ r# q. Q* c. v8 B. @+ Q: {6 v. @' [ L# \& S; D8 _
static struct platform_device da850_evm_tl_leds_device = {3 r+ x M, B. N1 X0 [7 ~
.name = "leds-gpio",5 n5 e4 ^2 m; J# H
.id = 1,) Y" b6 a$ I, x$ q; w
.dev = {3 R$ J u/ {- S8 H! [
.platform_data = &da850_evm_tl_leds_pdata,
b. ~( S. T( I .release = led_dev_release,
0 @! k$ {( S; S/ B$ x3 ~ }
* R! H8 Z+ Z+ c};1 t5 I% T; a. n; Z
W* s% \, s$ N! C" O
static int __init led_platform_init(void)
, Z/ v5 o9 { z& ?6 D: O3 o$ Y. J9 M& w' o{" J. D, H% x: A3 C: Q
int ret;- E/ W! Z; b0 G+ [& j# Q% c
#if 02 Y$ O5 ]! F! a% r$ t9 d
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( q+ E" G4 ^# E' o6 a0 U if (ret)9 y( x; K, G' `. k5 j' V9 l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) k Y y, P/ [. r: E0 y" y "%d\n", ret);
7 E5 I$ U$ K3 A' G3 j5 W) E#endif
* G- z! y2 C( ?0 P ret = platform_device_register(&da850_evm_tl_leds_device);
8 @5 O- l9 p8 n1 V5 @ if (ret)5 t* \/ m/ \9 r3 d2 _
pr_warning("Could not register som GPIO expander LEDS");+ x$ M9 u) I( `0 _1 X
else/ d, Y% U) h0 @5 W
printk(KERN_INFO "LED register sucessful!\n");
% N. U& H" q$ L# q; l) p2 W
1 i0 S# F8 ~* [ return ret;
3 `! _- r7 R- u o9 K7 C2 t}
9 y( a( [4 V& }. b3 ]( H% U0 {- f% R0 z$ J+ j5 K8 X
static void __exit led_platform_exit(void)& x) ? E# R4 C" w
{7 `: h2 L9 {$ q3 _+ F
platform_device_unregister(&da850_evm_tl_leds_device);2 p$ }6 d7 B" T7 |
& ?' v0 K" I9 [! { printk(KERN_INFO "LED unregister!\n");
. u, e# G2 F% _" F$ P: x5 G& w* t}
) ? a+ t% V$ m ~9 q3 t% T! b
+ j- @3 k5 _1 d$ p5 U+ A- I* fmodule_init(led_platform_init);' I. n( y7 c- N
module_exit(led_platform_exit);
" P- ]5 H/ J5 l2 H. t% L
" W" Q1 h+ l8 L2 ?& m3 bMODULE_DESCRIPTION("Led platform driver");
0 S9 {8 N; Z2 }4 U( l5 v2 LMODULE_AUTHOR("Tronlong");
7 o' J! b7 P: K* [: I% EMODULE_LICENSE("GPL");3 d& V3 }+ P. `5 @& k
9 X3 O* k! d' ~" ` w: r2 N6 _
|
|