|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" |1 _; o9 ?' v z
#include <linux/init.h>
" ^/ u! _7 O D0 O#include <linux/module.h>
+ B+ g5 S1 M$ l/ M% i% x9 @3 W#include <linux/kernel.h>+ L1 V4 B7 B. e8 @: D! Y$ g
#include <linux/types.h> }6 X0 W( g5 T. w, Q7 C6 F1 d
#include <linux/gpio.h>
, p+ B4 b8 B5 p+ r& I4 a#include <linux/leds.h>9 v* @6 ]' |7 k! n
#include <linux/platform_device.h>6 ]% p J: N. c3 h1 ^
9 H0 g+ c7 X* P b; j
#include <asm/mach-types.h>2 s$ p$ s- O: T' p' Q" ]
#include <asm/mach/arch.h>
" U" W+ Y G/ u#include <mach/da8xx.h>
: X/ k: m n5 s1 c- O6 `* i#include <mach/mux.h>' C: \' \: ~, N3 ^
8 ]" |9 H1 A+ r$ z9 g, z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" l0 R$ @4 x' G: ~, m6 w. N6 ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 f: H' X" @" W0 e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( E% U" }% R6 w7 S) |9 T1 X#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): c$ p% K, s; d7 N
; \, `" w g' {& m1 E7 p( c
/* assign the tl som board LED-GPIOs*/
: b5 F" d; K! J2 ^7 j Q$ M* Dstatic const short da850_evm_tl_user_led_pins[] = {8 b+ z ]$ Q3 A* U5 a
/* These pins are definition at <mach/mux.h> file */
' `6 V' c' ^3 h: z/ _8 T! b DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" K+ O% D& B9 t* O -1& n L( Q) S8 ], o
}; K8 u! D1 n# t( A! k
. J `, p5 d" G& L0 V
static struct gpio_led da850_evm_tl_leds[] = {1 \- { O8 ]% b7 _3 ~( o$ E4 j
{
" B- {* W) @% a, T* o* [* Q" J7 _ .active_low = 0,
; S. f5 y B) g6 I2 s0 k4 c5 C .gpio = DA850_USER_LED0,
+ @3 q: u2 _, P/ R4 T& p h' _4 o& `7 l .name = "user_led0",
1 [9 M, M) _7 b# J .default_trigger = "default-on",; I) ^6 z+ S4 ?* h" L! p8 `* r2 R
},& t& n2 q+ I! B1 E6 B2 C! Y$ G
{# h: B G7 K0 t& k! |1 Y% b2 }9 h
.active_low = 0,4 m- k: @5 W* L4 o) p# J" a
.gpio = DA850_USER_LED1,/ D" O& _, F/ A$ c# m/ M
.name = "user_led1",3 i3 y$ d. w& h _' z" o, X8 H
.default_trigger = "default-on",
4 A; Z. d% U7 T. b1 O. S& ^+ S },( _; s& J6 V. {% d! o2 O3 S7 Q
{' E7 W8 H/ z" x6 m/ _
.active_low = 0,
$ V6 E4 m" c. {) i .gpio = DA850_USER_LED2,. O8 B6 s6 E& [5 Z
.name = "user_led2",
0 u/ k9 u8 u6 y3 H0 b .default_trigger = "default-on",3 i( k9 |5 @+ b9 j
},
$ g' U9 v- d* }, h% R+ B4 ` {
2 M9 k% F" [! ], W) K) {5 B5 E$ b .active_low = 0,
+ }8 X1 u H. O9 Q- ]: D! l .gpio = DA850_USER_LED3,
; ?* B+ {2 A& `" m+ M .name = "user_led3",& ^9 D& M h7 E/ b2 L
.default_trigger = "default-on",
4 n( K7 [6 d8 m- H4 r8 N },; [3 f8 m( c( s) A5 w
};
1 s* U2 X V% ?2 u6 V8 U k9 R4 w5 N6 W" R$ ~$ c N4 G
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; i. ^% x" F4 e# M. j .leds = da850_evm_tl_leds,- R/ @+ S: a8 G# C8 ~' H/ X. i& J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 g5 ]0 w( t* j2 Z% V! g/ x" s4 [
};+ d$ Y% L6 P5 J* h/ O" }, F
. ]( n) u4 r+ b" w2 S+ y, ]
static void led_dev_release(struct device *dev)
) \. s( J" R' j I/ k1 d# H{: f7 c1 h+ M! t3 q/ L; q9 y, T
};; v; r) |5 N: D% h$ `- D" r$ q
4 |. J& j {6 T
static struct platform_device da850_evm_tl_leds_device = {2 k. b% L) O, D; Y
.name = "leds-gpio",
- l' ^. V) H2 \ .id = 1,' B0 q, D5 n8 x ]$ ^" `
.dev = { B% i" m; ^# g2 B2 Q
.platform_data = &da850_evm_tl_leds_pdata,
& q, ?. ~" Z/ ?* ` .release = led_dev_release,$ o/ e5 ~/ k6 y8 g/ I, o% q
}
$ }, l" \' n+ \! _- e7 X};) F( d- A0 D9 I8 h/ p
# q7 s0 C) y! Y- pstatic int __init led_platform_init(void)# l# B' W9 i( i" E
{
* Y+ B- w& j' E3 ~ int ret;' w/ G9 u; _( M4 O% d) \ y
#if 0
% E$ h, k! O$ }' ?6 b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 ], C6 `1 g2 p1 }$ H6 N
if (ret) v* O* {" S: v! L# t V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- X, k# t( Z6 G. p, x$ T8 g
"%d\n", ret);
1 {; X7 }/ |5 ^3 z( q/ K7 u#endif, K5 L& E- G1 ~1 A: v
ret = platform_device_register(&da850_evm_tl_leds_device);
: Z/ s8 \7 c8 ` if (ret)& ~$ A2 c+ t% ?
pr_warning("Could not register som GPIO expander LEDS");
% C$ K9 \" J, B else7 d5 u( @8 B) h9 [8 v
printk(KERN_INFO "LED register sucessful!\n");
0 G5 `2 O Q. |4 z! s, J
0 c; `& F6 w: Q. S2 w: @/ j* H return ret;
; W$ F# S+ W9 Q+ N}5 o4 n) I' `" U* L1 e; B$ H
4 w3 F9 b& s! r: h8 R c
static void __exit led_platform_exit(void)1 z9 M; } M% h# k3 Y! A: i, I/ c3 o
{4 {5 u: {& D2 Z* E
platform_device_unregister(&da850_evm_tl_leds_device);
( ^* [* f8 _' |3 }7 \ A+ e y* E# P: o" x# ~/ ~" S( T: b
printk(KERN_INFO "LED unregister!\n");
' m& J* H% L! ?0 B9 D j- J}! ?) y8 v& U+ [: J/ p4 H5 X
3 j' W/ x: d/ _* W/ T4 j1 c I: L
module_init(led_platform_init);
+ z/ E$ e. r- O B9 bmodule_exit(led_platform_exit);
* Y4 m) B$ _6 `- Y# ?! [2 O9 T, f5 O5 v( Z J7 T
MODULE_DESCRIPTION("Led platform driver");. y$ ?* z4 P+ m4 i
MODULE_AUTHOR("Tronlong");: r- f& u' m+ `9 H
MODULE_LICENSE("GPL");" Y( g% T# \+ a, E- i
$ J) i. I+ k! P, i7 P* O& w; D |
|