|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 {- c. E$ E" }5 I5 V' z
#include <linux/init.h>* m( z: |) G" E F* V- L
#include <linux/module.h>) d7 w# H8 }1 T; v+ ]' a/ O; E
#include <linux/kernel.h>, \7 B4 b" ?# G$ h( o" z* F
#include <linux/types.h>) P+ w7 L! Q$ }' [6 ~8 E- Z
#include <linux/gpio.h>4 J8 H$ D4 ^4 K0 N
#include <linux/leds.h>
3 \- _$ _' P3 i#include <linux/platform_device.h>
# d7 k( \. v5 Z+ {, J, _ U
& Y! c, ?) W$ U6 Y: |#include <asm/mach-types.h>
2 A. N. Q; D# S9 G' B6 m3 K+ \#include <asm/mach/arch.h>
/ Y8 d' ^. v8 Z4 v0 S( _9 f#include <mach/da8xx.h>
3 M- b, R6 F) s6 R#include <mach/mux.h>
1 q/ S+ f4 E! a6 {7 x
) | M+ D8 z& T$ v1 ~8 x8 p#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 d* d6 ~/ B1 E, N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) b- [4 l: y0 j/ ~8 P& q( H
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) b5 M) C! ~5 B6 [4 W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 x) h! P: Y; F! a4 S& h
6 D7 ^' l6 `! [! n: H+ C2 ^3 i/* assign the tl som board LED-GPIOs*/0 t* Q. s$ e. F1 Q; u$ m! y. U
static const short da850_evm_tl_user_led_pins[] = {
' l6 p1 i' C- o+ L+ \ /* These pins are definition at <mach/mux.h> file */8 S+ t8 O7 d% m1 U: l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 y% p& O: p. w) S
-1- a# M- W0 D! ]
};
0 h9 ^: x7 F: B- ~$ B
! K" d+ G6 J/ z2 _( ]$ h; ]static struct gpio_led da850_evm_tl_leds[] = {
6 Z/ H+ M3 \9 I: ?! _1 e; x. n {* ~3 [* B1 p- x% G! c3 r) k+ m! D* T( v
.active_low = 0,4 S R- L/ q3 m. r+ m. T
.gpio = DA850_USER_LED0,; m; |* ]% |1 [* F( n8 V
.name = "user_led0",5 {/ \6 |6 ~9 [9 H \+ h0 Y
.default_trigger = "default-on",
/ A2 U2 O4 B5 Y( ? },, J1 D# M, f- E; ^
{& l( l. i2 S4 R( t' {2 V! h, y
.active_low = 0,1 B/ {4 r2 D$ v
.gpio = DA850_USER_LED1,
! h3 B" o- k: `- a) C }% N .name = "user_led1",/ l6 |) z6 d$ }1 X5 m' R
.default_trigger = "default-on",9 _. v E3 z: d: V4 W; ?
},: k& T" ]- B, K8 ]5 y s
{
% P; j& |6 m7 T3 Y' a .active_low = 0,( S3 C/ p _# v+ _, i
.gpio = DA850_USER_LED2,+ r7 U! `* D) x; s
.name = "user_led2",) [- [2 w' E+ H5 r5 p5 c
.default_trigger = "default-on",0 P: f( [# ~% F: e4 _$ c& W" C( r
},2 I% g" P2 C- n; o" [1 P- C
{% a( M' E9 m* A# z! ~% M V9 }
.active_low = 0, U& C& a, _9 Q8 I, b2 y- a ?6 n
.gpio = DA850_USER_LED3,; f4 E" Q+ T; h; K- [4 g
.name = "user_led3",
% j. J/ D' g# H2 s) Z/ _8 d5 b' H5 V .default_trigger = "default-on",
' G9 X8 ]* @# |8 _ },. n8 x9 o8 u9 l$ o' q
};
! H( {' H" j& M2 C4 Y; p- n7 C) F0 H+ P/ o. J! }4 ~
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 h" U8 N; B7 I
.leds = da850_evm_tl_leds,
. }3 k" [5 I$ w0 { .num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 N& y" o7 @. a2 \. B; E! s4 C
};- L/ x1 T: M0 @& s8 C. j `+ |
. V' ^8 Z( y+ x8 U+ r* k/ Z: u
static void led_dev_release(struct device *dev)' R) A. @8 ~1 {/ P4 i# E& N- n# B# B
{
0 d; W. C# F1 B. ^};
2 M% v: N( f7 ~6 c" C! u; ^% i2 Y/ s! O) D
static struct platform_device da850_evm_tl_leds_device = {
+ e# X" A' n. m* n .name = "leds-gpio",5 K ]* |0 P w
.id = 1,- q2 c% B' Q/ `, }& `0 M% ]
.dev = {
* r, J/ G* A+ z5 F; M .platform_data = &da850_evm_tl_leds_pdata,9 x" l$ Z' K' Q
.release = led_dev_release,& U1 O; ^. \# g7 \7 @7 R# _
}
, `2 `, v& l9 b" q, `};8 u2 G- H# u0 d) s5 n
8 s/ r: {, q: X0 M- @static int __init led_platform_init(void)$ D3 p' W& F- V* i. Z# @) P- E& @5 d
{
: s7 p( o$ K2 h; _/ b& k1 t O7 f( V int ret;: J& u/ S: D9 B. F
#if 0
' i8 o: y' w; ^0 ]$ j, f; R ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 j% W3 P# S! w' T) O8 o# P if (ret)8 ], D ~4 t5 M. Y( a( w
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 `4 ? g( @% U C/ e/ f
"%d\n", ret);- J6 W0 `9 |5 ~: i. I7 k
#endif2 c, R/ T! }7 U) r6 Q
ret = platform_device_register(&da850_evm_tl_leds_device);
5 X* A; s) v4 h5 u! g if (ret)
2 }+ Q5 ] P7 @& n9 _4 O6 r+ C6 R pr_warning("Could not register som GPIO expander LEDS");
- y1 U+ s g4 z9 g2 D* a# ^% ? else9 Q1 B+ [# J# w
printk(KERN_INFO "LED register sucessful!\n");. U0 |9 Q. A) x( |6 t. g* q, k0 y
- X+ I* H+ a- }* t2 _& r return ret;2 r1 p9 W: R3 y- \1 _4 Z
}4 j' m. S, n! q5 _
4 I4 L& I0 y' ?( j9 S. A2 g
static void __exit led_platform_exit(void); {0 F+ a) ` {. O1 I
{
( A9 \$ z/ e3 N, H$ Z platform_device_unregister(&da850_evm_tl_leds_device);6 \4 K4 v2 ^* ?4 L! s5 p/ C. U- b
) t. t1 F: P% @& ~
printk(KERN_INFO "LED unregister!\n");
+ \( A% T2 K: X" ]. x}/ p+ ] h& E5 Y# V+ R6 A* ^
5 K1 h3 Y9 f5 w: f- p3 x/ y
module_init(led_platform_init);: T$ M& o' @+ u
module_exit(led_platform_exit);
1 }6 W- F& l( b$ ~: R x, j
; N7 D6 f. `1 H; WMODULE_DESCRIPTION("Led platform driver");
4 A/ Z6 A" R- ]- G) FMODULE_AUTHOR("Tronlong");
2 y& |/ J& |4 a) pMODULE_LICENSE("GPL");# w* I% Y4 u% a) Z& x' n
3 { P a( E& i0 E$ n9 g
|
|