|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. I9 G2 Y, |4 S' s
#include <linux/init.h>
! t/ W2 Q6 ^$ n9 l#include <linux/module.h>3 s7 v6 t# O- x6 [+ w
#include <linux/kernel.h>) }2 O$ o" @# D
#include <linux/types.h>
9 B7 r$ \1 o3 A% f#include <linux/gpio.h>
$ u0 n; J" e2 E3 o#include <linux/leds.h>
/ {- u/ A% d: P( \#include <linux/platform_device.h># `' ? p( M& i5 E
3 A$ G. Z9 [& h/ F#include <asm/mach-types.h>
! {# l/ k; x u5 S$ W3 r- G#include <asm/mach/arch.h>9 @1 i8 [+ z! P
#include <mach/da8xx.h>; k: v4 R) g" L& L' w
#include <mach/mux.h>+ o% O* s+ H4 U1 B
4 i ]/ v) h* _* K0 T3 E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 H! O8 v7 c, i- w+ ^) Y; b0 G a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ Y6 S% D) o3 ]( k+ I3 N* C# y ?5 K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' ]8 Z' J9 w$ m' i
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* z0 U. n. N% J$ K
: f4 a! t5 m3 E/ W/ y& Y$ p, T/* assign the tl som board LED-GPIOs*/
4 K, U) `& b! |6 Lstatic const short da850_evm_tl_user_led_pins[] = {
8 U; L8 e1 q/ Q' |0 v8 y /* These pins are definition at <mach/mux.h> file */* i" {& i8 s1 f. d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 Y) b$ N) S. x* I8 z& Y( `* M) T -1
9 C# d; N$ ^5 K0 }% }};
' b4 B; Y8 q5 _; F2 |7 }* G
y: r) o+ P7 I1 Q/ E. wstatic struct gpio_led da850_evm_tl_leds[] = { K! I' _+ i9 N; l0 z
{
2 z4 {% M' S, h- h) C8 ]' W .active_low = 0,- K6 e; X: G$ R! o; s
.gpio = DA850_USER_LED0," K% d8 l3 \6 `5 X9 \
.name = "user_led0",* C+ B/ E& H) Y8 F: l( p% `: b
.default_trigger = "default-on",& @7 z, K2 D" b2 F% v% I
},
; w7 b. ]7 W. D$ `) Y9 u; \ {
) s+ G( H/ ^$ r" S4 P3 v4 \& f: O .active_low = 0,
) E" D, @ N2 L: h7 ^3 Z .gpio = DA850_USER_LED1,
9 A0 p8 b" r# |; L4 Z .name = "user_led1",
; T& c3 G% h" }# ?( B# U2 x4 p .default_trigger = "default-on",4 M. A0 K: g9 H) N& @
},
5 |6 u( l+ O3 J+ B) q5 k3 n {
" u) b7 O: n2 d" A; Q* M1 ] .active_low = 0,
6 `: s+ T. o* i5 C4 x .gpio = DA850_USER_LED2,
2 I8 A( u- w+ J9 O" m .name = "user_led2",
% N, V; |* J' T; t' v. ^* \ .default_trigger = "default-on",( e4 h$ h0 h" D3 a- X
},
8 B! q. _+ {5 j3 W6 n' }; K* O8 w {
, Z- z7 _8 k$ z" }, l .active_low = 0," X% L( c) [* D C
.gpio = DA850_USER_LED3,0 g$ C: E- d4 ? f8 g
.name = "user_led3",
" T2 s+ J0 Z5 Z" b$ B9 V .default_trigger = "default-on",0 I. b7 n# C- S$ r
},
$ x% F3 G6 H8 [6 z0 _};
; Q3 h) H3 T+ U% K( i$ s/ M# f! r2 q u, s
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { o* R; w" _+ i% }% N/ U1 b; e
.leds = da850_evm_tl_leds,
6 m5 w) ^" V: Z- U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. ~9 d% Q4 K- }0 }};$ O |4 R* r$ `7 W
, V* ^+ ?& A( R( g* a
static void led_dev_release(struct device *dev)
4 @) i& ]8 U: A, H7 V6 z{7 d5 U4 p0 F5 G3 y1 Q* o
};1 |2 P/ z( B( E; S* D' O t- R
$ k5 z/ z$ T; p" T' g2 y
static struct platform_device da850_evm_tl_leds_device = {3 J5 W9 [" Z# }2 m$ D
.name = "leds-gpio",
* c0 }7 @2 x- s9 s .id = 1,
l5 O2 W0 U: Y! W .dev = {
/ |$ X' b# r' n9 o* |! O .platform_data = &da850_evm_tl_leds_pdata,8 @ q1 k9 \$ V8 r
.release = led_dev_release,
/ H& {# b; ^" c$ n6 I2 i }1 N& C, J+ O7 A! D0 t; t
};( k# R0 J, j% x, R" d- g
6 E5 m) D$ u3 estatic int __init led_platform_init(void)
" I8 q2 Q0 `) J0 p{
2 H' f3 `. A$ c& G7 u int ret;
% i p3 o: \/ `; ?$ o' s' X#if 0
% a9 I$ M% t( v ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ g3 F0 C! Z. o& ?' M7 g! {
if (ret)6 y3 S% V# F* G/ [7 {3 d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") G- H2 i6 N5 p" w1 i) a1 P" |
"%d\n", ret);
+ B1 j( j6 H) ^! J/ [#endif
6 ~- r1 T) N% a6 Y; R ret = platform_device_register(&da850_evm_tl_leds_device);
8 F+ M4 @; s# q9 Y4 ` y6 ^ if (ret)
1 I, J1 \6 K/ O4 V) a pr_warning("Could not register som GPIO expander LEDS");
1 M; o3 k3 ~9 E* c& p% u0 y/ o! i' a else' Q! ?; N) H; o0 b1 d7 V
printk(KERN_INFO "LED register sucessful!\n");
% O+ w( Q8 `# E( f: R e) I- e/ `* { X9 k; V, @9 Q
return ret;
7 g6 {, G s* J}
' B9 j/ o3 x( G& V: j) v* l; _) B! g% A" I
static void __exit led_platform_exit(void)! u I. }; h& T" M6 a
{
+ S; h: f3 T+ a6 h* P0 ~ platform_device_unregister(&da850_evm_tl_leds_device);) l! W" ?1 g# B& |1 N4 q
8 {, Q; ]7 E5 O5 I: I0 i3 v printk(KERN_INFO "LED unregister!\n");8 p- K3 M9 Y( k3 T; m g6 K
}
! i! \) R$ _( |3 f1 V+ a/ V% f# b* a( m2 L+ r3 K$ R) t$ B0 F
module_init(led_platform_init);
' L8 M0 a' O9 W, W S/ H& f, pmodule_exit(led_platform_exit);0 {9 F6 o3 Z$ b0 e5 V
+ m6 D. ] T$ W1 C- P5 n c; _MODULE_DESCRIPTION("Led platform driver"); g4 t4 I. s I1 J* E) F& Y, G
MODULE_AUTHOR("Tronlong");
2 O W$ E7 g* G' d3 \MODULE_LICENSE("GPL");
! e* C% y O0 v
) P k% j% j4 d5 [0 H6 @5 m |
|