|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 s6 W% \- _, ~/ }, i#include <linux/init.h>) i _( Z6 a2 i. i
#include <linux/module.h>2 h3 R2 D4 F/ T) q
#include <linux/kernel.h>
5 p% F: m5 F8 O; u7 q) q: h2 J#include <linux/types.h>$ y4 z7 Q$ {, h! ^2 i/ d
#include <linux/gpio.h>
& t5 G% e* s- [7 U6 o, \. e3 i+ [#include <linux/leds.h>
8 S" m3 x7 L8 o#include <linux/platform_device.h>
) Y# b" d3 P' }; }# j
6 L# e% p- l0 l/ e* t#include <asm/mach-types.h>
8 p4 p, E% b9 R# U8 h#include <asm/mach/arch.h>
6 Y6 F' v8 a2 A, ~7 }#include <mach/da8xx.h>+ P5 P- e6 y! I! T9 M ~3 v
#include <mach/mux.h># V$ a' n D/ g5 w5 C3 ]3 w
: ~% d) E' g* L) a. h#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ k" \. Q% M# W# Z" u#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ s4 R+ _. w- f* n
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 s8 O! n& B8 B8 t9 G
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# \' U" @3 J! S. T
8 v' c0 r3 I" ~# x3 @/* assign the tl som board LED-GPIOs*/, b" C7 A7 S1 J/ f3 z- G7 P
static const short da850_evm_tl_user_led_pins[] = {
3 i% v4 |2 p- m5 t$ C /* These pins are definition at <mach/mux.h> file */; W! c& }- D+ c5 |" R( v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 O, K' v) G& f+ R -1" |2 {% p- S0 i, n
}; {$ H( ~. b0 [
- t6 I- H! T2 R" D
static struct gpio_led da850_evm_tl_leds[] = {
, h" N0 B4 m; Q( P2 P6 F/ U6 u5 O {
5 v1 f% O7 }! @ .active_low = 0,
( a% O" k4 G* \; r, [$ y .gpio = DA850_USER_LED0,& L% A4 O) ^/ B0 w/ g
.name = "user_led0",
, @. X- _! k- f2 m) W6 z; C .default_trigger = "default-on",
! t- n- [: f& ~* k- G4 n },5 E0 }8 y) S& i& A# y* c V& {
{& H6 {2 o% w8 N: ~# @
.active_low = 0,3 o$ o6 \# f# o" l: |( \; o) G
.gpio = DA850_USER_LED1,
/ N) `. B, e5 v5 P1 R" [% L4 m .name = "user_led1",' \. |* h! F/ X
.default_trigger = "default-on",
( ]) i% P0 k( h2 D },
+ ]0 A3 ^4 n$ N( [ {
0 n/ A8 S% W ? .active_low = 0,
( {5 ]: R$ m k- [7 x .gpio = DA850_USER_LED2,7 X0 v4 t6 B1 _. q7 P& w1 s9 _
.name = "user_led2",, N" a! c- V5 ?$ j" |1 z7 ]
.default_trigger = "default-on",
& ~- }( j) i0 L2 Z7 i6 g },1 _( \* j: R) A4 k6 S( Y
{
6 _3 {* m1 ?/ C1 H6 n+ a .active_low = 0,
* [# o) L8 p, h: c3 F: f. v) M, U .gpio = DA850_USER_LED3,* F% j! o. u* W6 N! t+ B" u
.name = "user_led3",
3 h9 \. Y$ n `: Z .default_trigger = "default-on",/ g- d: b# X$ X/ p
},
! L1 S3 p& k, ~ s}; {( E0 S; C# Y" ^2 G" r8 l3 I
. u( e( Z, i" v( l2 l
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ x; y( H2 M6 X, S% O
.leds = da850_evm_tl_leds,
$ j7 G0 J8 R r$ V& V .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: Z6 U' L, z/ P0 F/ a
};
0 W9 _6 t1 ^ b8 E" Z. W3 {2 v9 } Z$ e* N& v! F% `
static void led_dev_release(struct device *dev)
4 K, e% F, t3 O) E3 }$ Y{3 i' _0 ~* P; q' U7 U, l
};
- [ ]5 t v. X
/ i4 f8 `6 L6 ]( pstatic struct platform_device da850_evm_tl_leds_device = {
, o! X" F4 S2 `9 B5 z .name = "leds-gpio",+ L# m; M8 i/ z$ J
.id = 1,& Z- ^/ {. D% i+ J4 Z( p* g% P
.dev = {
, h! l" I+ m$ M- k r .platform_data = &da850_evm_tl_leds_pdata,
' c5 O* A. Q) m3 r4 r .release = led_dev_release,0 t5 I0 j7 @, \) m% C) @
}
/ o% t% W" E& ^# S};
7 |8 b2 f# x) F( z
% F# H+ n1 V$ k2 A9 j8 a! I9 Bstatic int __init led_platform_init(void)+ G7 u" v* X" r) |
{
5 W. E0 M5 G! S/ { E: Z int ret;
5 m. g2 W, r% }2 s#if 0
3 `+ s; y: k# s/ s% t" ], M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 {0 D6 S5 \ K: U t9 @7 F" ^; q7 P if (ret)
- e5 H U; F8 {* @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- e! o% i9 A4 U, C6 T "%d\n", ret);
, k0 z: P: \3 }1 W, D#endif, g% L+ G6 @4 R# _
ret = platform_device_register(&da850_evm_tl_leds_device);8 T/ `6 ?. Z% E4 C- S( x
if (ret)
0 `& Q' T' u& U# W pr_warning("Could not register som GPIO expander LEDS");
& {' \1 k: s: P2 O0 [ else& N, r/ `+ A' t" ~- ~
printk(KERN_INFO "LED register sucessful!\n");* {2 B7 W2 H$ X1 W1 l6 \
, H8 e6 z# f; I$ ~
return ret;/ B' X+ l" [, V. R5 c* x" x& u
}
8 w5 b o/ f, j
$ W; [4 B/ ~. H' e- t# R: U* `static void __exit led_platform_exit(void)& E6 K; P w) {5 T4 `) m0 x1 P
{
' K: K- S. b% \% g1 v) _6 C6 H platform_device_unregister(&da850_evm_tl_leds_device);9 W* p7 C* B( `2 s* ^
; H3 o, f& w: U6 c" S printk(KERN_INFO "LED unregister!\n");: u6 d& V7 m* V
}* V" w5 R0 T& a% U k b( L
k. N8 [( l& W9 e0 Z$ Bmodule_init(led_platform_init);0 r5 Y* F* q B+ o9 ~
module_exit(led_platform_exit);
) E! {% m" r& j/ T0 S! i* Q# ~# j* [9 Y6 k: p) [' z0 d
MODULE_DESCRIPTION("Led platform driver");; b' @( u; _$ H/ I P" \
MODULE_AUTHOR("Tronlong");' I( u, j: u# M& }; R
MODULE_LICENSE("GPL");
: t. K( v$ G, o# s
$ o% f3 U$ b8 k' Z) z1 r4 [. N- p) d |
|