|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ g, T$ G0 l% U1 l9 H#include <linux/init.h>" O; @' E3 l# N) v
#include <linux/module.h>
, R A9 n( }2 u0 O' K, k( V#include <linux/kernel.h>4 @( d2 F# O! t4 a4 X6 u; G8 O) Y
#include <linux/types.h>
& x9 { y n( O6 ^) `, p; A#include <linux/gpio.h>+ i. A/ |0 L* C8 ~$ c
#include <linux/leds.h>
$ N0 B: ^ n5 T% z#include <linux/platform_device.h>
" Z. U8 u$ a% _% t; C. H9 {: j v* l" i$ k- E- C5 E
#include <asm/mach-types.h>2 f/ I2 @& e8 ?& a7 k+ \
#include <asm/mach/arch.h>) K* t; Q" q0 U- w# h1 t) H/ @
#include <mach/da8xx.h># w9 R- b8 t$ |! {$ I
#include <mach/mux.h>- F4 k8 o. ^5 a: P4 \5 s) S) A
6 E, m5 z8 K8 E6 p2 t8 B) e
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% G. y& @ q8 M1 H( s
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) U+ b- a2 G4 l" A4 s% A4 A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 n) X* |+ U. ?* w! ^
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. R7 B* n, e3 E% N; |, ?) i6 P _7 t. _
/* assign the tl som board LED-GPIOs*/: T$ z( w; d3 r9 o4 E8 G
static const short da850_evm_tl_user_led_pins[] = {3 _5 a/ w9 p% i% P1 w, ^6 R* V
/* These pins are definition at <mach/mux.h> file */
' X1 _: K$ v/ a& e6 ^% Z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) f" Y. R& N4 P0 Y. R3 k -1 o4 \: j ^ w5 j4 l1 K! \+ U4 h( h/ P
};8 J! ~! H0 e. |# Z$ g
) |8 R( z1 u- y9 z0 ]static struct gpio_led da850_evm_tl_leds[] = {9 j3 F9 J& t+ s
{ h P7 C: p9 S2 c
.active_low = 0,+ u' N$ F& ~- E
.gpio = DA850_USER_LED0,
7 G4 _+ Q$ L8 {+ ^8 n .name = "user_led0",
! ~& U4 E0 n j6 u .default_trigger = "default-on",# A, P6 K* L8 N( {# @3 Q0 Z
},
$ ~1 r4 I& t+ r l {6 P$ R; [8 H6 M- h" a4 @
.active_low = 0,* X, i' G8 k. L, _
.gpio = DA850_USER_LED1,+ h. @! o2 Q; g/ d
.name = "user_led1",
! T, Q+ s* m0 W, B! P# g .default_trigger = "default-on", }1 ~, ^: b/ ?$ }
},4 C6 A" F/ G0 {5 Z! q6 g1 ^, D
{
9 o1 I7 m) {4 {, E! K& k .active_low = 0,1 H" u y3 J9 e# L5 u% Q
.gpio = DA850_USER_LED2,
/ R# x" m8 i- W' d .name = "user_led2",
" Z9 ?4 ]2 w! Z G .default_trigger = "default-on",
. A1 O' K a( k },9 d5 o/ R8 Z9 O
{+ x8 F8 f3 I0 @9 Z" u4 H# o
.active_low = 0,
. I1 u4 O8 i5 z5 S- Z: L+ k8 M .gpio = DA850_USER_LED3,
; a" Q8 q2 W# h& w, A .name = "user_led3",& J' @, i, K( G0 a! ]4 W4 b+ p
.default_trigger = "default-on",$ \. ^4 d4 |! d0 F& S# q8 p) r. Y+ g0 p
},
" }9 T' n \; I+ ~};
& C, [$ c9 m! I5 v8 C$ L F+ b9 Q" b( s: L( N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. A! d; C& D4 `2 W- {5 `2 ~ .leds = da850_evm_tl_leds,
2 `0 i* o$ P& O g& B( T# _; q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 V; p- L1 ~+ V; P4 ^
};
# U5 o2 V# T- t$ _2 w4 C- A- d
$ l% u9 g9 v1 K+ V% A) M1 F& bstatic void led_dev_release(struct device *dev)+ V" `5 V0 v( e4 @' e# O
{
! ?) M8 b3 J/ }* a! M};
. c0 S! T' Z6 q d- [8 g4 d: ?+ a4 s) `: G
static struct platform_device da850_evm_tl_leds_device = {; Y: U2 _0 X; Q6 @# p
.name = "leds-gpio",) L r: g' V! O- J6 t `
.id = 1,
7 i, L6 Y* M4 n* x .dev = {
& l0 S2 Q% ~. R5 @+ }3 X& m7 c .platform_data = &da850_evm_tl_leds_pdata,
4 R8 s: O! c- k3 n" V* R7 t .release = led_dev_release,
, [8 Z4 k$ j- w7 V% ]; _" {7 m0 v }# \) T0 I. k* b8 k, q+ q( M
};' k0 e5 j$ s/ f- D
5 N/ k1 H$ T: ~& v8 Lstatic int __init led_platform_init(void)
, k5 D. @2 A- ~! b& z4 V( v{
" |; x9 W# U) A6 r& M0 L int ret;, d8 ?2 F5 j8 a
#if 0
' H/ _, X: f6 a, z+ R% O1 h" x/ ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) H9 G& K$ z9 y; Q) q8 W7 O9 m
if (ret)
! L! o) {9 e O- n/ j pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 d6 R3 O7 p# y8 E" t "%d\n", ret);
. x1 T j) i& h! }! L#endif# s% g" l3 _. [: ]- G
ret = platform_device_register(&da850_evm_tl_leds_device);* Q9 D/ ^9 [( {0 J
if (ret), v, i, P: m3 g) i5 `* E' H
pr_warning("Could not register som GPIO expander LEDS");
4 \$ Y1 k0 o/ u* | else" s+ y$ p Y, m- B; s/ N/ h1 ~$ U
printk(KERN_INFO "LED register sucessful!\n");/ c' W' \' A g* w# T! B. J: s
. W$ k8 G2 s2 g) X
return ret;
. v3 x0 q. X2 O- W2 a0 x* G}
# r$ I3 S" M: @. L( a4 p. F0 e5 v: R3 b" l0 D9 J1 w/ G
static void __exit led_platform_exit(void)) j [( `$ G% d; R, F
{& X* c3 P" L5 b, Z3 W3 R1 q2 z {
platform_device_unregister(&da850_evm_tl_leds_device);
9 R3 j$ A( `1 i Q0 j J& \
& Q5 Z. L( H+ A' W printk(KERN_INFO "LED unregister!\n");
0 ^! I! T: _) s0 W/ E+ `}3 Q1 z( v3 ^: G/ V' j: K3 X0 O( L
Q; z: c* G' K1 g: V
module_init(led_platform_init);5 L/ X3 Y, k; r0 Y/ y; u+ J
module_exit(led_platform_exit);& G) u) N6 h; S9 b1 e( Y* M" ?
6 z9 {$ T: I5 |! A) [
MODULE_DESCRIPTION("Led platform driver");1 `4 ^3 W# T- m4 e
MODULE_AUTHOR("Tronlong");
1 f7 ~ ~* F6 t: N, fMODULE_LICENSE("GPL");
5 g7 `( c f8 J4 L, m2 b2 _2 S, ?) Q4 b% T( l5 i
|
|