|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 f" Y. }" j0 F7 g
#include <linux/init.h>
' h% j T8 }% e* S$ R" b/ W#include <linux/module.h>- d" k1 D. M w! M1 H! k
#include <linux/kernel.h>
5 T- q, K" g5 C6 b0 _( a#include <linux/types.h>* p/ r: x7 N7 F2 F3 G
#include <linux/gpio.h># g& H/ u+ {, W) S- e5 \5 n9 \
#include <linux/leds.h>
$ W7 z8 f, x" m# b9 j6 b6 S8 p$ W- {#include <linux/platform_device.h>
) @- y- \2 z$ h: R T' Q6 o
6 v* Z2 ]+ x% j1 O8 M, F" H#include <asm/mach-types.h>. k. t- @ Q, ^6 }
#include <asm/mach/arch.h>3 k+ Y: {0 ^. o8 G7 M+ T
#include <mach/da8xx.h>
; F; U! H/ p0 G% [#include <mach/mux.h>% _% I: g& w8 X# ]
# e$ D* G. g, z9 N2 s) b
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 A' u% \, v3 Q. v+ m#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 x' S2 B, V$ O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ r& p+ f$ M3 S/ S1 u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) K! V4 K! k& O1 M
* {3 C4 e7 o/ X/* assign the tl som board LED-GPIOs*/ S% P; [& ~8 A* \
static const short da850_evm_tl_user_led_pins[] = {! q7 v8 J% [. p& F0 F, Q
/* These pins are definition at <mach/mux.h> file *// V4 |9 ~' s& ~9 x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: D: Y# K9 o+ w1 \ -1
* r- d8 |/ n& ~$ [. x4 W};, S9 T6 J% _ n' `6 y6 H9 I c o
8 K& v4 \! P! R, K2 i% z5 j8 C0 Estatic struct gpio_led da850_evm_tl_leds[] = { s' j/ T! V1 V' b3 |+ _ T
{
" q9 e) {$ g: I& d3 k" f, T9 x8 w .active_low = 0,
% t8 ]) v0 U/ M .gpio = DA850_USER_LED0,
7 n+ j( |. N3 s- E .name = "user_led0",
! K* |+ l! @, X8 R. Q W/ a .default_trigger = "default-on",
7 T+ W, `3 g) J" V: W9 ~ T" {( n },
$ k: l; \) I* D5 p2 v" x {
8 v; z: ~, B* a. C" Q5 o6 c1 K# i .active_low = 0,
0 R( n# q2 V( I7 A v3 p .gpio = DA850_USER_LED1,% ~) i$ C4 } [' E
.name = "user_led1",
; {( F( @2 @. `" {! g' u" [6 a .default_trigger = "default-on",
6 B0 y& f4 }, J7 M },, M( I: g2 X# m
{
# z* W; X1 `! R/ c .active_low = 0,
I: l1 s5 y' w3 f; }6 F9 F2 e2 h/ Y .gpio = DA850_USER_LED2,5 l; R9 \! t5 R( m
.name = "user_led2",
+ Z: e# N5 j& s G" ~3 s6 o+ t .default_trigger = "default-on",+ P3 H2 x w R9 c
},
) [3 W6 Q4 C/ {* z {
0 K9 ]4 t0 W& N6 Y .active_low = 0,
7 ?7 v' T( {, d& Q .gpio = DA850_USER_LED3, s8 Q y& p$ f2 _8 v
.name = "user_led3",; ]$ t& _4 h- j
.default_trigger = "default-on",! D2 Y/ n0 @+ v: A" R5 Z
},
; p. }2 {4 G' Y* Y9 C. D, n3 L};3 t h- ~) a4 j$ X+ ]
% N' K7 w) a/ w! Gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* F" S# e9 N3 D, z- \# {3 Q .leds = da850_evm_tl_leds,( t' B- C: ]: k3 ~% c- L
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ _! w2 D! _: r t0 F) q
};
- J$ z% B* J5 v. H
3 z& b) z- c' F5 {1 ?static void led_dev_release(struct device *dev)
! |% ]3 C2 D! H. \6 H& R; D6 a2 ~{6 D6 l) [ q8 @6 z7 x
};7 x& e! r( ^6 y: K
" \' t7 ^5 k4 J: Y
static struct platform_device da850_evm_tl_leds_device = {
8 T3 c0 ~! x# F5 g& P5 G. L/ A' D .name = "leds-gpio",( p; F; k f' t* V5 s
.id = 1,1 z( n: g4 o- @' k* O3 r. ]8 J
.dev = {, A$ x0 {7 [6 M! K% V
.platform_data = &da850_evm_tl_leds_pdata,
. @( a6 E% c( k' s .release = led_dev_release,
3 Z7 [6 }2 e: b: Q8 W% w1 H% b" L6 N }8 J$ X0 ~5 u& j/ I
};, {, ~* n$ X( n" x f. k* H
7 x; n6 }- H# v+ V# v4 [1 u5 ystatic int __init led_platform_init(void)! G5 v1 B# G0 z, c3 w
{+ a( W8 u6 D% m; y6 E# F2 \ e" H5 ~* }
int ret;
4 G8 E2 P0 x* O1 l3 h' c: D#if 0
9 Y, B. [1 G" y5 F ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 ?1 @% i7 @# z/ {7 [0 C$ g) _ if (ret)
- |% U3 w2 Q P; D9 [ h pr_warning("da850_evm_tl_leds_init : User LED mux failed :". r" }( g% r7 o
"%d\n", ret);% {+ I) w9 A" d4 o5 \9 U5 I7 J
#endif
! S. ^+ Z0 y8 N/ h5 \, V. L1 |; | ret = platform_device_register(&da850_evm_tl_leds_device);
- [2 ]0 R/ s7 Z' E6 `8 ^ if (ret)
! c$ w9 j# C$ z: o- ]9 A# q pr_warning("Could not register som GPIO expander LEDS");3 B/ e0 H. z: P0 c% |
else
2 K" u2 e0 v) z: A7 Q9 Q" `& t" V printk(KERN_INFO "LED register sucessful!\n"); |- G' b0 @+ Y5 B
* b- G, u/ K( F3 _4 [0 \3 V return ret;
P& l& T7 l7 |, s- V, k3 C}3 K: z0 g9 M0 Q
' t r) E9 |9 V( U7 P+ t" Z
static void __exit led_platform_exit(void)
0 b8 J( \) }- U2 F$ |{' @7 D2 g; R- h* L, v6 s" w* w* y
platform_device_unregister(&da850_evm_tl_leds_device);
3 N8 g, D! e% h6 _7 B3 F4 l2 P/ L3 ?* }1 a- T8 c
printk(KERN_INFO "LED unregister!\n");
2 G! _0 l) C6 [; n} U: m# V0 F6 N4 d; }" M
, ?7 g s, s" H0 W9 g6 A( omodule_init(led_platform_init);
2 H9 N+ l" Z/ F3 Lmodule_exit(led_platform_exit);7 {% ~2 D: c: w
2 q9 X6 f, \0 aMODULE_DESCRIPTION("Led platform driver"); q6 s6 C! U3 T# a5 }
MODULE_AUTHOR("Tronlong");# w. ]1 `+ ?. Z1 u5 T
MODULE_LICENSE("GPL");
9 O' b6 |7 ]9 |, w/ _4 J- G3 h3 v
|
|