|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. |$ n* a) v9 _, w q#include <linux/init.h>
& }- ^( z) T# Z1 n p#include <linux/module.h>+ E+ e" G% d% V8 z' ?0 w' S
#include <linux/kernel.h>4 O8 A; |9 h, z4 a E! f7 u- _1 Q
#include <linux/types.h>: R8 k1 n+ @; }) f/ W
#include <linux/gpio.h>- v5 |: i" E% I0 n8 b' n1 G! B
#include <linux/leds.h>$ O# v" r# B6 F/ D; g
#include <linux/platform_device.h>
5 @: W8 b. H) Q) a9 J4 x* t; S' _0 x9 G
#include <asm/mach-types.h>7 T& T% X# g9 {
#include <asm/mach/arch.h>
( E# `, Z" B+ W$ z* J, |" @4 R#include <mach/da8xx.h>+ [! i! I* B; E% V0 p9 m6 m
#include <mach/mux.h>
$ \6 q4 D+ s& s9 |0 f, x0 a- P4 k! \: J6 |/ w
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' N) N: \! _* b. c6 `. o7 h
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' c* u# n0 V# C F/ X#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 D6 B# f: Q7 O
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 H. f( p0 E' r2 a6 B
% o/ G# t' z+ K8 \
/* assign the tl som board LED-GPIOs*/- a/ \. _( @" C. G1 v* ~9 R
static const short da850_evm_tl_user_led_pins[] = {* K J5 v8 T3 p" ^
/* These pins are definition at <mach/mux.h> file */: }' t2 ~/ y- ?6 m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 z6 i1 R3 j8 C4 f -18 A4 C1 [+ d5 ?5 z$ ]# a' r' w
};
2 t" i: Z w% e( c9 x! T9 e0 Q9 g/ `4 I: E% w
static struct gpio_led da850_evm_tl_leds[] = {
- _2 \* j" g( l2 ~ {
- @& i' c0 y0 g! Y1 K1 e .active_low = 0,
, G9 b" E; Q- p$ e( s .gpio = DA850_USER_LED0,
1 d: m# p+ X) r9 K0 [* m .name = "user_led0",
" C ]7 V- j9 B5 d" R .default_trigger = "default-on",& d: i- y* X/ ]/ A7 `
},( L' B6 T$ d' f6 w1 c h' Z0 [
{6 V3 Y7 Y! |# P( r( g' v
.active_low = 0,: @' Q$ D& U. b+ @
.gpio = DA850_USER_LED1,; ^7 l# ~* K6 M% k; \5 J! p
.name = "user_led1",2 e+ c. E4 ?+ b( u( T5 U/ V
.default_trigger = "default-on",' `0 ~+ }$ Y* ?+ b6 u- u+ I
},
' e# e" \+ |3 u( R: A {, O- u+ p' k8 r1 n6 e L# J; \
.active_low = 0,
' b8 m& n* n u( T# t .gpio = DA850_USER_LED2,# ~2 l# ?0 r/ ]/ v9 w- d4 {# m
.name = "user_led2",
- @- q9 S, q% j Z9 X, @( b6 X2 o% g .default_trigger = "default-on",, x0 @! ~$ a" _$ ?# z9 L
},
. n& k5 W @) ~( k {! f: m( h0 Z5 D, H0 b4 S0 Y
.active_low = 0,0 ], Z. t6 }8 n9 _
.gpio = DA850_USER_LED3,
, X, X/ C- ^# ^! Q .name = "user_led3",2 e: u7 l+ S* O* j
.default_trigger = "default-on",
' U$ u- z) R8 U! W2 A/ _& r( O },
8 }' Q) J' Q* T};4 t& A5 ` l& h8 j/ a; q
3 i4 V3 e6 j# e
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" B% l' W7 q- s6 S6 N, J/ m9 v .leds = da850_evm_tl_leds,
0 A9 S1 G7 H& T( \* L. G* M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 @4 h+ F: V+ I. ~1 Q) v! m
};
0 x" ~2 \& i& m1 n; c9 j
9 ^. x, Y) Y$ z+ e6 [' t6 k5 Bstatic void led_dev_release(struct device *dev)$ N' ~) D5 j& b Q) B7 o
{# X8 [$ J* J" }/ B1 W- G
};- i2 l7 B* w" q6 E" @
5 z! ^ N* h9 f
static struct platform_device da850_evm_tl_leds_device = {6 U+ o: C5 X- a4 v% \9 q5 V5 t) G: E
.name = "leds-gpio",
- J/ Z1 [) k3 g1 ?( a7 E ~9 v1 Z$ ] .id = 1," C6 Q" x3 b! c/ c4 _# n7 ~9 A
.dev = {
( T( t5 p* ~: y* K0 ?( g' @ .platform_data = &da850_evm_tl_leds_pdata,
3 t% e6 f8 g7 ~# _/ H .release = led_dev_release,
& {4 x: P% Q! x, }* g* r }
1 P8 Q( z% E( z% X3 R& Q: k' v3 L};
$ } @/ p; R3 @: G; d1 q
: j) n) d! K8 P0 z; |7 }static int __init led_platform_init(void): u3 N* f3 G$ H5 Y- A6 ^- I& v b
{
& t$ x# \# {: w7 K! V$ L/ m0 ^5 l int ret;" f% _6 k# v/ y/ j
#if 0& O3 c! p% ]9 C6 t) g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* T% m. r- S6 o2 x0 g if (ret)6 R! d2 v: F [0 A
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 f! a' a+ d- h- C
"%d\n", ret);
, y; o' e) r$ o/ v#endif7 X- ^0 T# a8 F- ?8 z3 i
ret = platform_device_register(&da850_evm_tl_leds_device);0 [; }" m' f) d; v6 z
if (ret)
6 S) f2 E+ H1 v5 D6 Q pr_warning("Could not register som GPIO expander LEDS");
0 k+ l F+ q; m& K: o else q" g; U4 k/ t7 `4 M
printk(KERN_INFO "LED register sucessful!\n");
' \% m7 h# |2 E: i. |
8 S, d) y! a* ?9 U2 p return ret;
$ Q: s& q) `3 A- U: C}9 s ?: x# e1 |2 p4 w! T5 q
- n7 m- L0 [/ l# ]: m, Bstatic void __exit led_platform_exit(void)$ K& W: e# F; G5 V" a' B
{
8 l' r6 l" M% q5 I5 C platform_device_unregister(&da850_evm_tl_leds_device);
9 \' \' ?0 m8 n0 K1 W4 q/ p/ Z# n# f# u3 S: J: e1 w. @9 t
printk(KERN_INFO "LED unregister!\n");
: r, ~& Y0 w$ X; s& m) K6 i- L- _}
* @: p; \" Y0 D; `! ~
& }1 v& v" R8 g6 y& O% ~* ]/ Fmodule_init(led_platform_init);
6 K2 l3 d' Z6 I( B9 mmodule_exit(led_platform_exit);/ Y! A1 F9 }/ m
* b( a8 N1 k8 b7 h; n+ {
MODULE_DESCRIPTION("Led platform driver");" E5 E9 Q A1 t* j: u- Y
MODULE_AUTHOR("Tronlong");- G0 Q' ]; C/ Y! `5 Z
MODULE_LICENSE("GPL");$ A2 A* r' U* Q% Q
& r1 P' A3 z3 Q3 _2 B |
|