|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 N8 O ]6 o8 _5 ]; r8 h
#include <linux/init.h>
* h4 L% U) {5 V#include <linux/module.h>" N. H0 @# C; n- H+ [$ x* o3 v J
#include <linux/kernel.h>. F9 O% u/ ]. D0 Y
#include <linux/types.h>
1 t- h' y. Z- R: K! l#include <linux/gpio.h>
+ ]" j5 Z: Q& ?; [. t+ H#include <linux/leds.h>9 a+ l; _. N, ?0 [; p8 ]
#include <linux/platform_device.h>% W" t: S, g+ `' `2 z/ z
7 _- Q W- v5 f6 g
#include <asm/mach-types.h>: p, |6 l* W6 `" F6 q. j3 ~ `+ K
#include <asm/mach/arch.h>, J/ w& h4 l( t
#include <mach/da8xx.h>
# s! J; c* q5 D1 k) A#include <mach/mux.h>
2 \ H: o1 ?% Y. d& u6 J6 [7 i, u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% z' r( V* B% s0 j
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( I3 }9 ~; k/ ?# M. f" t$ A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 w) X; O' o5 |$ V W#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( C0 l) I1 q/ `- [% ~7 ?
8 S' Y J% h* {, \" D0 n
/* assign the tl som board LED-GPIOs*/! _+ _7 g& b) w) x3 h3 Z
static const short da850_evm_tl_user_led_pins[] = {8 Y2 J+ r7 w) D0 W
/* These pins are definition at <mach/mux.h> file */7 g( o' z0 p9 j7 W: {/ g1 J) o
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% E% V. A! K4 t8 s" e' e7 O! V, [
-1
( e N4 `4 C" w# {4 |* G};" I7 y+ _0 d/ h8 {/ j' ?2 o; r
& @& y; _" g0 I, {
static struct gpio_led da850_evm_tl_leds[] = {
, z3 G& x% L5 c) j. z5 i {6 c3 Z8 H( \% o7 M6 f& q
.active_low = 0,
" O8 m* e! H) H/ M .gpio = DA850_USER_LED0,
& F. R! {6 `4 w) d2 P/ d1 O& ` .name = "user_led0",
% \. d( K3 h `+ ~8 i2 ]% M .default_trigger = "default-on",2 M y4 g( p4 b' o- x
},3 j0 ^6 ^% s% x" Z$ M9 _$ b
{7 r8 A! n4 w( o
.active_low = 0,
% g$ J% }. p5 H! I) I3 _' d .gpio = DA850_USER_LED1,0 B1 A7 f* ~8 J7 e/ h
.name = "user_led1",/ K) t# M3 D- ^7 N& g- _: o5 P
.default_trigger = "default-on",
( q4 m6 q+ `; X+ S) G( `5 ]: U },( V( K( e' g, R% |+ A$ p
{+ x1 m7 X& Z; I, X- y1 n! V
.active_low = 0,
, Q7 q, v) R9 k* [8 P .gpio = DA850_USER_LED2,* ?+ [" O' P3 w# D( d7 W+ G' K
.name = "user_led2",
% P7 Z7 k, {0 B, ]" s/ A4 k .default_trigger = "default-on",
' j0 C8 D" x1 E' O },
5 I8 y4 L+ _% I, {. v, O* @ {
. M( h+ j! P5 Q .active_low = 0," Y( q, h' y: X5 ?
.gpio = DA850_USER_LED3,8 ?% k5 R+ }7 t
.name = "user_led3",, |5 k' \" W \2 e9 j0 O) W
.default_trigger = "default-on",/ R k4 f) }+ O6 k1 @
},9 k& R- ~6 L; m0 }0 w8 X
};
* ?9 v/ q" r4 W1 H& b" e. Y2 G. L- Q% T8 I7 |, s' h* [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { A" ]5 ?* }7 A' K, A
.leds = da850_evm_tl_leds,* M% p" l: P/ z2 @" j5 Q' b
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ L) a5 ~4 n @& ~3 Q) P" G
};' Z/ ^4 A- l* @9 P% D1 F5 p, j R
/ m" n, \$ r5 f, R/ Z2 sstatic void led_dev_release(struct device *dev)( B$ t6 R3 q2 T
{
5 H. t8 B9 Q& j};
8 _; f; `7 I3 q$ {
* y1 E" P) I8 C& a0 F5 _: Vstatic struct platform_device da850_evm_tl_leds_device = {
% a9 O6 h: K' z .name = "leds-gpio",0 B9 T* j/ q- R, @
.id = 1,4 I. x% n9 G5 R8 ^
.dev = {
7 C; }2 M% k4 d1 z2 l .platform_data = &da850_evm_tl_leds_pdata," h4 s3 i8 ^0 d
.release = led_dev_release,
# i, T. Q4 Y' p/ T }( @* o, y$ u c" f
};
' e: G# _3 M. r% t; {
4 f/ ]; c2 I( L7 y1 ^static int __init led_platform_init(void) j! Z! [0 p1 u- z- I$ E) v
{
* [% V. _9 t+ Z5 r% ? int ret;
& B6 D5 E4 F# ]; S/ A#if 0# a9 S) k3 E9 M( e. G( c" G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, ?7 Z/ J, I# F; e, j! g
if (ret)
- R- C \# R8 ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! k6 U2 g+ r% @# _" D "%d\n", ret);% i; V$ r- q- B3 k, |
#endif5 l5 }6 f( I- t* l- z' Q, u# B& m; ]
ret = platform_device_register(&da850_evm_tl_leds_device);" x# J$ t- ?) {/ x/ ?& \6 U" N
if (ret)
) v% {- z& q% E8 ? z; m pr_warning("Could not register som GPIO expander LEDS");
0 i. G* U# T8 Q: Z: u else* }* t2 H2 |0 y0 b0 s- b: h& h% R
printk(KERN_INFO "LED register sucessful!\n");4 N2 u' e$ D! G' S
( Q7 k& T$ F" k& X return ret;2 j; [" Z% n3 k. D- R
} D9 A! X4 ?. U- S [9 b
' n, O1 n' U/ c0 U
static void __exit led_platform_exit(void)
+ S5 A* ] }( M& P" ~& d' Z( Z{$ ]1 B! P) T" Y" p& U3 p
platform_device_unregister(&da850_evm_tl_leds_device);" {0 K2 ]$ C2 ^$ ^! ? S
( q' ~$ {3 q) {, R printk(KERN_INFO "LED unregister!\n");4 P. a3 |* s2 T" Z! C1 ?1 a' P
}
1 x. o8 T3 @! D4 |7 T1 d% Z. Q6 Y: g7 ?6 v0 E+ U0 C8 O3 r" d
module_init(led_platform_init);
9 W/ e7 l. H! gmodule_exit(led_platform_exit);2 P9 O/ I3 d+ Z
* K+ q% Q- `: |3 i% NMODULE_DESCRIPTION("Led platform driver");
* E3 ?6 ]4 a& w7 m1 m* C5 I" g# g1 F5 EMODULE_AUTHOR("Tronlong");
( D! [/ O; M: v" F q. eMODULE_LICENSE("GPL");2 J- @7 r" M8 J1 l \/ ~
^2 i' M$ Y: r4 G4 j* n# X |
|