|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: M) f$ x; s: o) m# k# D6 Y! f( t) x#include <linux/init.h>
w9 G7 G c* u8 w/ _* ~) \#include <linux/module.h>
% t% R' o9 ?) x, A( C#include <linux/kernel.h>- w& c, a* v( r2 b3 Q1 c
#include <linux/types.h>
6 J% ^, ~& e3 Y& j9 j! W# Q& N#include <linux/gpio.h># J6 B1 e( S% Y% D
#include <linux/leds.h>" i# J9 l! v( T. u$ z. w
#include <linux/platform_device.h>( z/ ^5 V/ L, h" l0 c2 p& X4 J9 q
" n1 s( a8 [+ @( c+ \#include <asm/mach-types.h>
2 {5 r& N, y- N; x# u9 E* y! p' C+ p#include <asm/mach/arch.h>
# H5 n; ]; `% ~! L. a#include <mach/da8xx.h>
" r( R4 m3 n4 g4 L; g1 j( F#include <mach/mux.h># o9 h3 e1 I5 C# @
8 U- V+ u9 N% x. h
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 d" B* Z4 z' p: M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% H8 x6 Q2 D% p1 A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* t6 e% ` T# x#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ |4 Y/ q: d# r& Y. o2 J
* G: ~0 c% }5 h/* assign the tl som board LED-GPIOs*/
; E) Y: a3 G' Nstatic const short da850_evm_tl_user_led_pins[] = {
+ K {; ~5 a- ~% g! | /* These pins are definition at <mach/mux.h> file */
4 s* z' t& u" z( I6 w DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: J3 Q& ]! _8 A6 U' n. ~/ R- c6 G
-1
/ F6 G1 f) G. L4 K( u1 z& X};
4 [, B/ p1 u" W; w
; @0 q9 {' \* F, F' O$ D5 Wstatic struct gpio_led da850_evm_tl_leds[] = {# z; x# k! u0 q6 I( \
{
' a$ U) ^7 S! ?0 h .active_low = 0,
5 W: C' b j: C& f, S .gpio = DA850_USER_LED0,
+ n" |$ H3 P# z, s. r R" ?: | .name = "user_led0",: k" A; d$ F, P |% b
.default_trigger = "default-on",# f: V2 d/ j% R3 [9 l
},
$ P1 v: E& l$ d2 j) j' T6 p# ` {3 C# u, u7 k+ `' X0 G; `; F
.active_low = 0,* a: V: q* [ B7 J/ i0 V- v
.gpio = DA850_USER_LED1,
- ` u" r) T' `" t8 L% H .name = "user_led1",
/ f9 D) B- u& C2 ]0 d( s .default_trigger = "default-on",
2 p8 P& p$ Z6 A/ H0 x },2 b- r. d& ~ x7 ]9 z" m
{
' I8 }! |: _9 J& i- X .active_low = 0,7 ^! ~, n4 T1 T7 A( e3 G* a
.gpio = DA850_USER_LED2,$ K4 [# N3 q8 H! Q1 e; |
.name = "user_led2",
, U( [ W! I1 ^9 ]) V .default_trigger = "default-on",0 D i; @$ C+ ^) ] ~- [
},8 f9 I. Z; D! K9 u& t# O7 Y
{
7 V! h+ D7 Q% w$ K* F! j" e8 [ .active_low = 0,( y2 V+ N! N- \5 I8 X5 s
.gpio = DA850_USER_LED3,
0 q" ~, s" T) Q& q& ]- N .name = "user_led3",
* X, R/ P' a! {8 W( Q. f# h$ @ .default_trigger = "default-on",
+ _! S7 Y' H3 z" r }, r6 R9 m2 Z' q; @3 F$ Q7 ^
};- B& n: }; o8 S
6 k: o/ b: m: J
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" r0 Y, f9 Y+ h; D9 ?8 n* r
.leds = da850_evm_tl_leds,
. i* P {0 Y7 b' s/ N# R# u2 r S .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# \% l" H, ?, a; E/ I};/ w( @) H, Y" {0 H
* X3 n' G, j0 ^# f( Q" ]+ M$ G
static void led_dev_release(struct device *dev): v# I9 C$ t3 u+ {, `7 Y0 [* B
{
" p: S$ e( E9 s6 g3 M: _};. g. p* j1 e8 ?1 e @+ F
$ [2 p3 H3 Y G% Q% u
static struct platform_device da850_evm_tl_leds_device = {" X6 O# x/ t9 j( U( B) f
.name = "leds-gpio",
+ A3 j9 P! S+ d .id = 1," y) o* L! z8 ^1 P) M8 t
.dev = {5 `8 B! `, D1 _6 N9 l9 V& Y& i
.platform_data = &da850_evm_tl_leds_pdata,4 W; p, }8 T1 j# a; T, ?
.release = led_dev_release,3 v" M5 G7 C1 v/ _* Y, O( k3 U8 K
}
2 A- W0 l& R: b7 ?6 d0 a};; t6 j7 N( \$ P& J' @* q
( F6 \' Y4 z9 m# v1 H
static int __init led_platform_init(void)
. i+ N# r6 f A+ T2 @7 J' y: g7 Y. Q{, z2 j6 a. E2 M( ?7 t- n5 `. o, Q# j! E
int ret;
6 L6 a7 J4 k1 v. p#if 08 I/ J# a" ~4 B- j( K% t( u
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, W, p p- o5 o7 T4 G( D
if (ret)
/ ~) G5 ~. q5 I, y; ^5 v# P- P pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 o/ [0 K6 n5 Z, v
"%d\n", ret);
4 c+ f$ `% w' \( w#endif0 z. X7 w1 l0 L3 I
ret = platform_device_register(&da850_evm_tl_leds_device);
2 T% `) }: R& c8 W, X1 d/ c( z' z! B0 | if (ret)
5 F8 o2 Z; c2 Z1 e: q9 l5 V8 p pr_warning("Could not register som GPIO expander LEDS");
* M4 w3 r& ]- K6 l" e7 y( h else
5 T0 V8 s* L. |" i v: `3 @ printk(KERN_INFO "LED register sucessful!\n");; f" E- {# S" N) s2 r: M* h
& J* ?5 I2 {7 O return ret;: a( W! v+ ?0 x: S
}- ^3 `4 H5 Z' O( k; w9 W4 f3 N4 N
7 f3 c8 X6 R* V6 ~
static void __exit led_platform_exit(void)" v& F+ E% a- Y0 e/ z1 B% i
{
0 r: K! {7 `, c" | platform_device_unregister(&da850_evm_tl_leds_device);
" h9 Y/ |. O! u2 C
* [# V- F9 k; W% Z: k2 b! a printk(KERN_INFO "LED unregister!\n");
1 q, z0 @: t" j5 ]0 D}
# x* ?: \6 [9 e3 L" k/ ~% m. q* I3 s4 m6 y( [
module_init(led_platform_init);
5 l# ^; u) o; E! o$ mmodule_exit(led_platform_exit);2 T& L8 T& M: F* ~0 z' S6 d$ P
8 i* A; q4 v; k5 p* KMODULE_DESCRIPTION("Led platform driver");
$ k* @# b8 b$ w5 h5 pMODULE_AUTHOR("Tronlong");
1 X+ q' s# s% V. B# p) V' ]0 w0 wMODULE_LICENSE("GPL");
" \, T8 r1 W2 b6 y0 n9 w! T( o6 | z2 V6 Y; X
|
|