|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" \. s/ b( B- ]7 v2 C+ x% D#include <linux/init.h># B v7 }6 ?# v. u
#include <linux/module.h>
# ]6 W! M0 e6 ?#include <linux/kernel.h>. H5 B! G- }3 ^: Z+ k
#include <linux/types.h>5 `1 m# H, j/ T K" K9 d
#include <linux/gpio.h>
' ^7 H; \! `5 d0 k) m#include <linux/leds.h>
$ ~" Y7 N9 b9 ^# p) c0 R$ g#include <linux/platform_device.h>
2 n w( Q; Y1 V+ Q, n$ n9 o; F" u9 x7 C
#include <asm/mach-types.h>; L* b& {8 L1 @! o
#include <asm/mach/arch.h>7 G4 n. _9 R3 p4 n
#include <mach/da8xx.h>
% u# z3 J# I2 |6 `% C#include <mach/mux.h>
% A% f7 e8 i7 }( L# W. ` K. \6 ?3 E4 F$ S# ` l
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ O3 _, K: v) P4 p. m#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 a, w* b2 F: F" U$ h- R. g
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" @! q& t" k3 w$ M e( i$ l! f6 s
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& Y) c! {9 r- W
# g; e6 J# K1 U3 |' L& y/* assign the tl som board LED-GPIOs*/+ F; ~& E$ D' k9 Q R, x( f/ o7 L3 ^
static const short da850_evm_tl_user_led_pins[] = {! K q* m+ y. K# H2 Z7 z
/* These pins are definition at <mach/mux.h> file */% {' B* U; `% U: e0 v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 e M9 w6 S* J9 t( w -1
2 s& i7 S& R( [- w};
! M# v6 l# Q0 q/ P3 I
( M7 C% k) V9 J Lstatic struct gpio_led da850_evm_tl_leds[] = {
6 x0 l; ?: z0 Y: l! n {
7 n/ ^; F7 q, F5 w* |0 ? .active_low = 0,: L5 J2 S5 L7 j0 L; P
.gpio = DA850_USER_LED0,$ A2 o- u+ c8 O% B+ _$ M7 _1 p
.name = "user_led0",
* ~# p& w/ p+ E6 r0 m% T .default_trigger = "default-on",
6 |) i w7 L1 `* l3 {& | },7 i4 U/ L6 f! Z d/ g
{0 b( f. ?/ S/ x# ~; f
.active_low = 0,
: S& X+ `2 d+ B; Q/ o .gpio = DA850_USER_LED1,
" ^* F7 @3 L( |9 D1 u( O1 G .name = "user_led1",
2 ]- e: _9 Y* K .default_trigger = "default-on",) @7 Z( M; x. a& `+ q6 F$ l
},
# M q1 A7 S4 l6 k1 s {8 L+ u6 Z, v8 M" r- `
.active_low = 0,
8 X* b( b& S# N0 E .gpio = DA850_USER_LED2,0 F N3 d0 M- t- A/ Q' f9 b$ ]
.name = "user_led2",% b7 n% j1 t4 m( l+ D$ M
.default_trigger = "default-on",1 q6 l' M# d+ O' F' t
},4 z/ o5 n% S" d
{
/ t, t9 K" l$ L& M, T( e .active_low = 0,
% A! o/ {' D' \( ^" {! D4 L4 K2 u* j( u .gpio = DA850_USER_LED3,
* q, V( v' {5 `3 V. k7 [+ e. ` .name = "user_led3", }! k2 ^: Z2 m. L5 w
.default_trigger = "default-on",9 s! M0 }% B% T
},+ {# O# G+ s7 A& E: {8 M
};
* u) j" w8 g) M R+ e( q! n, M5 a. Z/ O( p& J9 v! w" ^; I) C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# X6 i& u7 q: y: O .leds = da850_evm_tl_leds,
4 `' V3 y! V& |. {, g$ V .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 K0 J' e4 m+ y- X H$ t, n$ F1 @
};
: n7 ^+ ^, K. B# s2 B% N7 I
5 y( t0 d, L, u" Ystatic void led_dev_release(struct device *dev)
7 ^2 B0 V0 b: T9 j2 X{
1 d4 K# H1 `/ |' A* q};
$ \. ]2 ]) @5 I% ]2 t) |0 M, A. J# l# q- l( V p( g9 g
static struct platform_device da850_evm_tl_leds_device = {
; {9 a3 g R( H8 D8 d! P" N3 } .name = "leds-gpio",
2 X3 s" p+ {! a' F. r1 r& t .id = 1,
0 f8 l) |7 U& j8 u% Q2 O .dev = {
8 S0 H5 l8 J/ b7 q$ q( U .platform_data = &da850_evm_tl_leds_pdata,1 t- S' b2 k5 a: s) Y: b: d/ V, L
.release = led_dev_release,7 N# H$ U- V, O) i7 Y
}
$ h8 R! |4 f" ^& l* X};! c* b- {+ B# `; j1 X4 b, e0 f6 J* M
( g% o+ s. r4 N6 jstatic int __init led_platform_init(void)( C* y$ f5 K. [- K
{" O/ a+ ?8 {! d& w
int ret;1 e* X/ l/ D/ F
#if 01 N# ?- b: ]3 Z0 W7 v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 L+ J* Z( ^5 S$ \
if (ret)
" I3 ~) e: a" s: | pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 N R! I5 m( N; S' `
"%d\n", ret);4 |8 a. b( U( a0 S9 I1 Q, y. S
#endif
/ ]" Z1 f- ^$ g ret = platform_device_register(&da850_evm_tl_leds_device);# g8 M. [ e( n
if (ret)9 ?- L" L+ G9 S
pr_warning("Could not register som GPIO expander LEDS");6 Z3 L- ?) u2 S: T
else
% o9 @! i7 v8 c! `: F- n$ j1 A: T2 v printk(KERN_INFO "LED register sucessful!\n");, y0 I9 [, W0 s3 l' R4 b
8 d$ e3 }6 x5 u& `# i3 U6 j, o+ s
return ret;
8 A8 O+ W) ?0 E& G0 k" R5 `}
' U- b: |4 L4 e% i. Z6 n9 d
7 I- L& N% r5 V- t: |static void __exit led_platform_exit(void)) C) G! K' Q7 P. Q3 d6 n
{
% l; T* j: h; }2 d% D) t platform_device_unregister(&da850_evm_tl_leds_device);
2 ]1 e* e1 L) x) f* M. @' Y* u7 U) B
printk(KERN_INFO "LED unregister!\n");
4 N5 ~7 m6 g" \8 |, c6 g}8 j! v" F' a5 C$ j
6 D$ o& k1 S& ~$ |0 Lmodule_init(led_platform_init);
( `7 u- Y3 `" E% [& amodule_exit(led_platform_exit);" T. B/ t; h& T
0 z1 o W' W+ W1 r4 ]3 xMODULE_DESCRIPTION("Led platform driver");
* }" `3 T9 `' e4 \. A5 IMODULE_AUTHOR("Tronlong");4 v( I: f% t$ }' P& X. T
MODULE_LICENSE("GPL");3 B* w: X/ q+ R' V9 ^% ?* `* X) S+ W
" _; b& Q. Y$ E, x- t
|
|