|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 K, q3 b8 L. v6 ^
#include <linux/init.h>
+ w }5 t! ^" ?8 b#include <linux/module.h>
/ ]2 E3 O3 J! }' y#include <linux/kernel.h>% Q9 T8 Q3 y! y, d' l* n
#include <linux/types.h>& v, x. m( Z) R* H" {2 n; T
#include <linux/gpio.h>
: Y3 X5 r6 m1 h3 F& g% p6 i0 ?5 P! X$ R#include <linux/leds.h>" C; a" f% R$ `/ a2 C3 O6 j3 I' }2 _
#include <linux/platform_device.h>) j& q: m# W* h; Q% @
4 ~1 C- _) j3 @3 E) g2 L: i- r
#include <asm/mach-types.h>1 W9 f# d7 P0 _ L. H! J
#include <asm/mach/arch.h>: R% P+ j. t- n/ d; N/ V! a& h
#include <mach/da8xx.h># b# z8 W( \$ h' A3 Z. s7 Z
#include <mach/mux.h>
" Q& H5 t1 R$ Z
7 T) T% T4 W+ Z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 p- u" p$ D3 C#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ `, r o! z2 ^7 @" e+ ~6 F6 a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 W0 Y0 O) w& r6 b/ W! C
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). c. o) s" Q7 L- O3 H& Y& E
& z& a. i2 J" K+ ~. B% L/* assign the tl som board LED-GPIOs*/& M) c/ |2 \: r8 o/ A( v
static const short da850_evm_tl_user_led_pins[] = {
- @* F( B1 B/ N7 J- s) p6 Q /* These pins are definition at <mach/mux.h> file */" ]9 T) N" l# q+ {6 V
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 n& d% p# K! n
-13 \3 f6 a+ ^6 g3 e4 ]
};
/ I! q) f5 }5 V2 w8 z: Z3 ?, Y
static struct gpio_led da850_evm_tl_leds[] = {4 G& V/ L9 s1 a2 G
{3 ~, z: k7 b- D8 V' t
.active_low = 0,% T. @3 D& r/ @+ g% |* b
.gpio = DA850_USER_LED0,+ | k4 Q8 v, Y2 B1 K
.name = "user_led0",( C/ U. }( P& R8 G) ?$ R
.default_trigger = "default-on",
' L+ _9 ^( M9 g5 g6 q$ v },
- v2 Z1 }& U: r7 |7 G. i: v) b {; l9 c; B" t2 `+ v7 N) `
.active_low = 0,: l& [1 W3 J7 p. p% N0 n
.gpio = DA850_USER_LED1,: m7 H- }2 G- N5 }% L( Z
.name = "user_led1",
& | ^: [+ v& Q! U7 L .default_trigger = "default-on",4 M( k) U7 W# C% d& h* [" [
},
* w; b7 X4 ]+ C2 f {- C2 s4 j7 b+ ]% w
.active_low = 0,. W2 v1 l3 I. o' j* g& Z
.gpio = DA850_USER_LED2,
" K$ l1 [9 H k0 e: n .name = "user_led2",
7 ?. P1 G! n% a1 I- }7 b8 Y: W .default_trigger = "default-on",% K4 _) q- B u H
},
4 \4 C) L# ]8 d) H5 ]+ ?) b {6 Z, K4 S: U- I/ q/ R
.active_low = 0,5 \' h$ B. b% t
.gpio = DA850_USER_LED3,% m( m, | d" H2 f0 M
.name = "user_led3",
. W3 q/ s$ j2 a- s) ~* C+ [ .default_trigger = "default-on",* v/ o2 F# m% }( ~7 N
},- |( D3 s) Z( I) k( `! h
};" q+ X) O) G8 p$ {; N! w8 r
; Z+ G& p$ k- g+ v9 F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# |$ F* y1 e# H4 @
.leds = da850_evm_tl_leds,
7 N F* M/ D, i+ ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% |; ]+ X3 x5 c, U};
2 D3 b8 l- n2 K% a6 _' t% g Q" t! f+ `7 M! f
static void led_dev_release(struct device *dev)
]2 y L- G4 m5 y7 p* w6 \. G{9 G7 \0 W: Z( V- I; ^2 _7 O+ H
};
5 p* T- ^* {- H
8 J7 r/ u5 p. C6 W5 E+ Bstatic struct platform_device da850_evm_tl_leds_device = {, H3 p3 Y, i3 B( j9 s( b1 y
.name = "leds-gpio",/ ^) Z' b) N7 H
.id = 1,
& p P3 ~7 n5 ^5 K% k) O o0 w% Y .dev = {( i8 A! x3 A7 A% e$ n
.platform_data = &da850_evm_tl_leds_pdata,5 b8 [0 {, X: {$ M* i
.release = led_dev_release,
$ t' r" F, k) Y! f7 z, I }
/ u8 q6 C- k; d8 n( U1 A' C3 S};
# i0 k Y% W: }: d9 V Y
9 C" p) P. b9 Q; {: G+ qstatic int __init led_platform_init(void)
3 Q& z! U6 a. A3 C9 O( y{
- H2 K6 W. Q; O# }6 f' B int ret;; G5 Z7 {7 @, _& ]" L ^) E
#if 0
8 R) V# ?3 }7 ?6 U" p3 M, } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); u8 T( x- x* W- f( `" U
if (ret)9 o9 I! \# v9 _- J7 a
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") m; b9 l+ i& H0 V; r. L! z' R
"%d\n", ret);
' Q- t5 L8 F0 ~4 h6 J0 o#endif
4 g: @ N! l: d6 h ret = platform_device_register(&da850_evm_tl_leds_device);
0 v3 r7 S4 j( | if (ret), D. `. K/ v! v% ]( w6 M0 _
pr_warning("Could not register som GPIO expander LEDS");
! {: ?: X. O: @! v. o4 k$ M3 D0 r else
$ ]/ d6 D1 C$ f, L* Y5 j printk(KERN_INFO "LED register sucessful!\n");' h# m# p/ L9 ]1 o+ y( l) S* X/ G
E4 G5 n9 i8 L" z' E3 H3 G return ret;
9 O2 D% m. F. L" @! y* e- F}- o5 \ \, b. g" x* Q
, z* ^7 \5 l& J9 n& A! A
static void __exit led_platform_exit(void)+ q- n) Z0 D, \
{
$ V3 G* T$ C( c ?* l3 R1 I platform_device_unregister(&da850_evm_tl_leds_device);8 ~4 X& E7 I: y5 s' i
7 h2 y e/ x4 q& X7 M6 U
printk(KERN_INFO "LED unregister!\n");( c0 M2 S+ q2 Q6 J# x/ w. K
}
) R1 l, ~) Q3 _ {# l3 J$ j9 R+ U5 m+ f
module_init(led_platform_init);
X3 F2 C0 G$ g6 |0 g7 e/ Y' @module_exit(led_platform_exit); L# V) y' c. R3 `$ y
* d% [+ h5 n1 w2 p* |9 |' b6 lMODULE_DESCRIPTION("Led platform driver");
" S4 }2 y& U3 v$ B1 t" PMODULE_AUTHOR("Tronlong");: {& e: i V! X' Z: L+ ?' h
MODULE_LICENSE("GPL");
' V/ E7 {* M5 {# [# d* o* b, J3 S- Z9 J4 F& Y+ {
|
|