|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 z1 i. p* W1 w d
#include <linux/init.h>. t2 c- K+ G; Y, Z7 ~
#include <linux/module.h>+ b5 R! X/ T2 P {
#include <linux/kernel.h>; W- @& @" p2 v0 C+ `
#include <linux/types.h>. Q6 q/ _+ w( w1 P
#include <linux/gpio.h>
& o5 U* C7 u7 n0 A" V' x3 j#include <linux/leds.h>
/ }. e3 X% q' H9 m0 A6 p' y#include <linux/platform_device.h>
% a1 \; {) e3 B: H
* s6 X) r+ N( O6 g#include <asm/mach-types.h> }6 I0 c6 D: x4 R& D% w/ |
#include <asm/mach/arch.h>% Z3 z2 W* E, ~$ y- V
#include <mach/da8xx.h>, g" _ j3 j# V! p; q
#include <mach/mux.h>
7 f. j+ t8 E# l! |' c! E b/ f& P1 x0 B4 M
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# `' r; \$ Z3 B" |8 b
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 e6 a. a0 r, s& R+ f/ N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. U0 z5 L, N5 X- w) H! j#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 X1 J% z2 d/ }9 j0 h* l* V/ Z* v
/* assign the tl som board LED-GPIOs*/, C) D7 p. v9 J! Q$ d
static const short da850_evm_tl_user_led_pins[] = {
) {0 h% Q1 d, |' R /* These pins are definition at <mach/mux.h> file */4 ] K i q" V c
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 J7 w2 u( o6 D# B
-1
! N7 A* \/ `$ B0 j};
, k* z" { B5 G% V5 k- O
$ R9 b9 z& c4 O# Q k {% A$ K/ fstatic struct gpio_led da850_evm_tl_leds[] = {9 p* I- |5 W/ W- m# |6 B4 Q
{
" y5 N+ }! L1 ^- ^1 @2 U4 M .active_low = 0,
3 r$ C% ~8 Q0 x0 `3 M S2 z* }' ? .gpio = DA850_USER_LED0,8 Z' j& D- B6 L& @/ h) E; G
.name = "user_led0",
, S5 {1 J9 n5 a% h/ ~/ M .default_trigger = "default-on",
" p1 g% m5 J3 S3 \ },
A! |2 D0 N# s" V) V {/ ?& T8 j+ _9 a7 [) S9 ~1 G+ B; G
.active_low = 0,/ y& j1 b$ x D% n% h& b9 W
.gpio = DA850_USER_LED1,' e3 p+ e& Z$ W2 k7 b
.name = "user_led1",( Q6 N0 ^' M0 p- P
.default_trigger = "default-on",
! H* i( s4 |- C- y8 K, R4 Q },7 ]. L; K: n" k; P! z% @6 g3 i d9 M
{0 {2 _& b) G3 w! A" j
.active_low = 0,
6 ^4 U1 U% n# N- ?+ N .gpio = DA850_USER_LED2,7 @4 U% Q0 D4 V) a2 A \
.name = "user_led2",' j* i5 t4 y `4 G! I
.default_trigger = "default-on",
6 k. q ~5 z) d+ i; ^! j },; C: R2 y N5 S
{' V- E8 Z( J- @
.active_low = 0,
7 {' U5 X2 j, N. D, Y .gpio = DA850_USER_LED3,
7 a: ?# n" e6 w: u: B' d- \1 G .name = "user_led3",
+ `8 Z* F4 ^- m/ X6 F .default_trigger = "default-on",+ o! \' k% t5 _% Y7 C( }+ K
},
& U! Y: S6 W& J- ]' Z3 G0 s2 Q# ?};! L' g/ W' h( q* G4 P( B
# o- d, i% U- R/ C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' c& b) w- `# G/ i .leds = da850_evm_tl_leds,3 }+ u& x1 G- n7 f. ?0 O9 g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 i }) W6 H& V3 g& X5 d};# O c3 G; s+ B- \6 E4 ^
0 [! A$ Y, {1 f) A0 C- W2 \" Dstatic void led_dev_release(struct device *dev)
% l+ ?; i7 L$ f{
1 L2 ]% e0 q: ]" P" W};( e6 W% O2 h3 c4 K9 z2 [
' U J8 x0 S3 m+ S) u: L3 s/ Pstatic struct platform_device da850_evm_tl_leds_device = {
& p! ?) D$ `7 k k/ M4 y7 @: b .name = "leds-gpio",9 @ p6 k5 @. E7 R( g
.id = 1,
, i7 H- E2 @0 } d .dev = {9 X5 U# Q7 V7 D" K2 L
.platform_data = &da850_evm_tl_leds_pdata,
2 {3 e' l# C3 p8 B .release = led_dev_release,6 P/ ^9 L1 N( S$ Y2 h1 [4 p9 W& p
}
* r1 n5 q4 y* a2 N; x$ x" c) Y! i};$ c3 j {4 }3 q
9 u3 D0 D0 ?* A+ d& L. \
static int __init led_platform_init(void): V0 ]# E& E" x3 D& q) H/ t
{
6 u/ g( Z7 G/ ^" a% p/ ~' b int ret;
6 E: d* a" b8 P7 n) n* U+ Z' ]0 t$ t#if 0
( s! L" z0 j3 ]9 s ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 b$ C- I4 m5 \" T/ d: g
if (ret)
& S& u* p( ?7 V Q+ L pr_warning("da850_evm_tl_leds_init : User LED mux failed :" X: J$ _$ R% |% h! @
"%d\n", ret);8 _# b4 o* \- U2 _7 p5 G R
#endif
$ w2 X8 H8 }- ?1 } ret = platform_device_register(&da850_evm_tl_leds_device);7 p, e- J- O7 a$ L
if (ret)
# C+ a: q: r* {2 D pr_warning("Could not register som GPIO expander LEDS");7 T9 [3 P; Q3 D; D' N
else+ L$ g4 ]4 O ^" K
printk(KERN_INFO "LED register sucessful!\n");
: H8 c$ i- A) u; e6 r- Q5 {9 k5 b; D$ C2 y- I- e- g( O" Z" x, [
return ret;/ ~$ R; G8 `' L! c I3 S* {
}
. Y1 X0 ]" I* C* ^1 M! H7 F$ j, v9 k0 v% I/ I
static void __exit led_platform_exit(void)8 k6 c0 h# g/ Q1 g$ Y& b
{
4 j8 \& C4 M( z; A: q8 Y- C platform_device_unregister(&da850_evm_tl_leds_device);
0 O: z l& G5 P/ C/ ]& W: O, q9 p1 V% P/ S
printk(KERN_INFO "LED unregister!\n");
. l2 g) W2 Y1 P& |% Z2 j& R' K}8 ^" F7 u2 U: D, J2 |
/ d$ T, @7 N0 n8 N$ n5 ^
module_init(led_platform_init);2 f& i8 ^: M5 x& g8 {+ }
module_exit(led_platform_exit);
, q. H& i E, I' B
; f* ?& N) n# x9 x* aMODULE_DESCRIPTION("Led platform driver");
. n4 b- |$ U" _( u, R, ZMODULE_AUTHOR("Tronlong");& Q& b3 V. l2 s; M8 o
MODULE_LICENSE("GPL");
' j: p2 G. P v/ q, K* ]2 z# j" X4 z+ U) V4 i2 |: v" O# n9 F8 G
|
|