|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 D# Y$ L5 m: v2 }, ^#include <linux/init.h>
P, N: P3 c0 D, X#include <linux/module.h>; K/ Y$ n' D7 b9 B! f0 x3 H
#include <linux/kernel.h>/ _2 U1 `0 g$ C$ H! Y, R+ m: Y
#include <linux/types.h>5 [) @/ O: y8 s d% |! }: y
#include <linux/gpio.h>! t# ^2 |; ~0 a6 t# y3 E
#include <linux/leds.h>1 ~& F$ _9 A) ~/ [$ Z0 X
#include <linux/platform_device.h>2 \: o6 g `+ p3 ]4 ]
5 b; @2 g8 N3 _; J1 Y* H: S1 \#include <asm/mach-types.h>
4 P$ x9 b5 g3 v# N+ \- H. d H; p#include <asm/mach/arch.h>
1 g7 y+ h \& W' L& \#include <mach/da8xx.h>
+ u. e( v: O/ C# V$ t#include <mach/mux.h>: T- z0 D4 `3 J; j4 R* T
* _* V! e6 R0 F3 [! S$ A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 V4 N \( P6 Q# I/ `, B#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 j8 c0 n! \' y" e1 h! U#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 n1 x% y$ E r: `6 I
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. q6 N' Q) M$ |$ x l* H
4 o( D' ?# o6 W; M/* assign the tl som board LED-GPIOs*/
2 w5 t( T% Y# R) A3 _+ |static const short da850_evm_tl_user_led_pins[] = {
; A6 }$ A) ~/ z) [: i5 ]" h /* These pins are definition at <mach/mux.h> file */
$ s% x! h; [7 n) n+ A6 w4 c DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 z. {7 S2 ]: K9 q% b; [* N1 H
-1
; L- d# O5 ~4 U- V% H};. i+ f! Q' F# y& T( O" `
, A1 \# p; d! _/ F1 lstatic struct gpio_led da850_evm_tl_leds[] = {: ~) u8 g/ T# {7 h
{( H* J* Q8 k7 U& V8 E s
.active_low = 0,. A3 T) }1 I6 A
.gpio = DA850_USER_LED0,
3 P% ` d6 v1 R- o9 Z+ ?+ Q .name = "user_led0",* e2 N* o$ g6 o
.default_trigger = "default-on",
! J% y& n: M- K! f( V3 J: ]5 T% n },
+ A# Q1 G2 z2 L% G% j- g {8 O6 @, S8 [/ }+ \2 E( f
.active_low = 0,! |* a; V( M. s; i" z) O
.gpio = DA850_USER_LED1,: p9 M9 D; W4 ^6 G% ^( T1 K& f
.name = "user_led1",
, Y9 Q2 {; v9 u! T .default_trigger = "default-on",
$ ~5 m+ T2 V: X% i% S- R },
& e) p- @, t* k h {
% m" l* f9 ^- A: [* U .active_low = 0,9 _/ Q2 S1 a' W$ d0 c
.gpio = DA850_USER_LED2,
1 @7 s# ?9 {2 {" V .name = "user_led2",
( B3 y' ?9 r2 m* [' I* T .default_trigger = "default-on"," U: b: ?" n% x0 p( \& U. {
},2 X) w5 s. @7 T9 [
{7 l" F, e! F1 }1 x% H$ Z
.active_low = 0,0 h/ V$ x) a, r3 u+ ~
.gpio = DA850_USER_LED3,2 i+ c# A* m p5 o3 j
.name = "user_led3",+ A& U9 H) p; D# c' P
.default_trigger = "default-on",
; O5 B k t8 s5 U, o8 S( o: s z },+ Y0 x6 [9 a) x$ x, y H6 L0 n! N- [5 O
};2 Q$ `2 t7 }( ^ q4 G
, n; X0 Q% m+ P- {3 B- m
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! [9 `9 O7 b+ P
.leds = da850_evm_tl_leds,0 i. ^0 U; C8 h9 o
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! ~) j5 H8 q* }; k G( H# H3 y};4 j p$ j; R" T6 M4 m/ B- L
$ S* u& w0 F* H
static void led_dev_release(struct device *dev)
/ u/ S# J1 ]0 E( J( ]/ ?{
- g# u, O0 W# O6 P! A' y};7 X. z4 e p4 F9 N2 d
# P; }3 d0 @9 K
static struct platform_device da850_evm_tl_leds_device = {
* J9 j+ `* _2 n( q .name = "leds-gpio",
, W+ Z) |5 Y; ?# B9 f* \ .id = 1,
- U$ J% L) S5 X6 _0 S .dev = { T# f) b* m* E N& b7 {4 A' ?
.platform_data = &da850_evm_tl_leds_pdata,
1 c" f" ]- w8 B! C l8 G# u .release = led_dev_release,
" @6 F( E- U8 X0 g/ d: M9 a& U }
, i+ Z( K" i: H, {& g; H};
" Y+ f& t1 x4 }: O; A- P' ?" C2 G: k/ s
static int __init led_platform_init(void)/ X0 \# Z0 | a6 K/ k: b+ I( Z
{
' F2 {3 u: {/ r9 e' z int ret;
- Z4 `: |" ~6 b0 A: z#if 0
1 H; b ?! D. R" Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) n; c! ]/ O+ E if (ret)5 E5 {6 B+ w+ A$ C A% Y) E2 h
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 q$ }' }' K1 h2 m" ~% ]4 |8 m "%d\n", ret);
% B, q; `! X, u! ]! `7 C6 p2 ]% `#endif" z% c# c6 m( p# [3 W3 f! }
ret = platform_device_register(&da850_evm_tl_leds_device);. d4 Y- T$ \5 b
if (ret)0 \- \, f2 h3 c, b4 F( w& j- b
pr_warning("Could not register som GPIO expander LEDS");
* a: ?* F) D/ S3 _0 s/ {) Z7 g3 b else
6 q9 F" z* {: R5 X, X- m* q' | printk(KERN_INFO "LED register sucessful!\n");# p" i* L0 o+ j9 Y$ u4 Y
/ E5 I+ h- Q, Z& x0 v% g) D J w' A
return ret;/ M7 F; b1 M( g! f7 d5 a# }) q6 K6 B1 @( u
}
. i# c6 e% V8 C" o( f1 u; W# x; [" S) k, K# n8 N3 q
static void __exit led_platform_exit(void)
0 L& W( H" c7 `7 D$ j6 z- t{( f, v) O9 `; }. A D
platform_device_unregister(&da850_evm_tl_leds_device);
- O! A2 ?2 R1 G3 e* }" b2 G3 N5 f# c% M8 v. E0 y% P7 W% S
printk(KERN_INFO "LED unregister!\n");5 t1 Z3 u9 u% n
}4 ?9 D* ^; q, A- |
! H. @# P: W. j5 z; S6 Vmodule_init(led_platform_init);/ v) J" B! Q/ L' G/ l* ?
module_exit(led_platform_exit);0 H7 |- S/ } s3 v$ D5 {
/ R0 D3 n) b/ |2 P( g" hMODULE_DESCRIPTION("Led platform driver");
& d+ |% I& T& y7 X, g. uMODULE_AUTHOR("Tronlong");
. o7 E* b3 C* qMODULE_LICENSE("GPL");5 w# J: O' u: n: H* r+ @7 F
O X$ E' s3 E% I/ i$ C H/ U |
|