|
求大神给下面的程序做注解,请稍详细些,谢谢。
- Q( K% m2 x. o' }( U; \/ K2 }#include <linux/init.h>2 a; v$ e/ g; a2 x- v
#include <linux/module.h> m [" x1 C" e
#include <linux/kernel.h>
9 c. A- i- d& ^! k0 d7 }# E3 T#include <linux/types.h>' X9 O0 k8 V$ n1 x/ A
#include <linux/gpio.h>
9 o, k* ^4 S N1 S6 x#include <linux/leds.h>6 i9 v$ [. r, b+ ], v( s; V
#include <linux/platform_device.h>
& W4 h+ p) N1 f. R
6 c" A) s9 } g#include <asm/mach-types.h>) ?( F$ D* }& J V: K7 D% |; [
#include <asm/mach/arch.h>/ Y9 i. R9 W' M
#include <mach/da8xx.h>
# C) o B% ~2 R: T0 E& \#include <mach/mux.h>
& X% f. g* V8 O
' y/ i) z9 H- {# Z0 }#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 w' W+ A2 J5 M5 q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: m9 V2 [' q7 R! Z& x' r#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, ^+ p0 [4 `( C#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# |# @7 A h1 r6 h
( }% k* L5 K5 D7 t( }/* assign the tl som board LED-GPIOs*/
7 J; A! E# E6 ystatic const short da850_evm_tl_user_led_pins[] = {
) j4 n1 I% ]# O) p' d! `9 h$ ` /* These pins are definition at <mach/mux.h> file */
2 u) A* j: c' ] DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 ~8 H& K+ x- D( n0 s* F q1 E -1
5 D7 y5 T5 y7 F. o2 h};4 H" \) R* @* q3 g* k
5 M2 S" c, g- V1 L- w4 M
static struct gpio_led da850_evm_tl_leds[] = {
1 }: k; h% T( X! R {
3 C% ?6 I t" o# [ .active_low = 0,. s* A$ @. l4 U0 e, f! f* P, _3 T; r, b
.gpio = DA850_USER_LED0,
0 b6 F! d! E+ Y, o: O; ^- c% g& x .name = "user_led0",- e! x# D- z1 j1 G
.default_trigger = "default-on",
/ W! p( T- ]% O! E },
1 ^! ~8 f' s8 Z# s, @ {; U2 [8 F5 _! z- I
.active_low = 0,
x% m9 D7 T9 S$ Q C. i5 y/ e1 G6 c .gpio = DA850_USER_LED1,
0 a/ j- a% s0 K, h .name = "user_led1",+ B5 I* G: y5 {! |
.default_trigger = "default-on",
. o* K% {$ m7 l1 r7 ?3 ?0 Q },+ E& E6 ^6 M" W }% F
{
% h2 R/ D) M3 d) J4 N @5 E .active_low = 0,
8 T1 M7 k6 x4 Z% G! j$ U" E .gpio = DA850_USER_LED2,
o3 H5 [+ W# a& Y' Y .name = "user_led2",
; `- \3 n* S2 L/ k+ I/ L7 q. U .default_trigger = "default-on",
. A% N% s# C+ P. V/ t },$ P9 P$ \4 ]) o, ~, O" A
{" c6 u) b5 }+ I( m6 U0 x6 k
.active_low = 0,! p6 j5 W6 G: T) s
.gpio = DA850_USER_LED3,. m9 R0 K/ W/ w2 `' G, y
.name = "user_led3",0 h& X4 V- x; W
.default_trigger = "default-on",9 `. M$ ~- a; X5 u( V6 t& w
},
/ j* v, b; C6 y$ p7 _* y};
: G+ E* D7 l) D" n' G$ q6 M% G4 G1 |0 ~( Q& K6 M T/ T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% n. Q7 t5 _( D# o: s
.leds = da850_evm_tl_leds,
6 K" s- d5 ^3 L T2 L0 } .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ I' L( g; O7 S# o8 x};
% p' ^9 c% A6 S7 P1 ]; W* s0 R
$ [$ N) Y% O2 ustatic void led_dev_release(struct device *dev)
4 p/ w: g! r+ F5 {1 r7 e9 B4 |. z4 ?{% K, }8 G; K6 d" }( d. {
};1 F+ M$ Y: g( X; ^* D
4 W4 [7 U& N3 g( M0 \$ u' ?. y) p
static struct platform_device da850_evm_tl_leds_device = {
$ z8 d2 \7 A& ?2 J$ K. Y/ J .name = "leds-gpio",7 O8 v0 @) ]5 d! c$ O. c
.id = 1, I; g1 z! p# L
.dev = {+ H0 x, G) g2 S8 z c4 W$ M
.platform_data = &da850_evm_tl_leds_pdata,. J% g2 Q0 c2 Z8 w0 o) {* n
.release = led_dev_release,
1 ^# A2 v: E7 G9 P q }
, c# _: k( S" M};
6 x. `3 [( B& Y: m# c% s/ r# t8 T& E' r* P5 X) J: h
static int __init led_platform_init(void)
8 a: H0 h7 E3 K+ d/ y{
5 @0 | k' u8 I7 U+ c, \% T int ret;
! O7 ?# I2 s0 p% I#if 0. ^& e, g# t$ b% U, d" B! Z2 `- J0 K
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, s! [1 a2 U3 J" V% k" M: _8 a
if (ret)
8 |4 ] J: K$ F: a# U, D pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 ~' R. h* g1 E# D: E- t
"%d\n", ret);
( h# ]3 W$ Y- [ c# e4 ^8 y- w#endif5 G: r% D5 R/ o A
ret = platform_device_register(&da850_evm_tl_leds_device);
; X/ Y6 O* T7 M, S/ D* G! P, C if (ret)/ y3 _( E6 E: J; T( @: w8 B3 j
pr_warning("Could not register som GPIO expander LEDS");/ n8 P {9 l) L: j9 h& ]
else3 l+ t l6 b' i" \) e$ ]5 t
printk(KERN_INFO "LED register sucessful!\n");
: k2 ^8 h; w1 |. ^9 { O
6 r. O5 Y! e. l return ret;
0 M% W% |6 M0 x( W( C+ \}
/ G* |% s. j$ U4 \4 j: C. X' e1 O
9 g7 k& l# w7 f1 i! f1 ystatic void __exit led_platform_exit(void)) @6 M; c& ?" L$ P$ G( S( C
{
; L1 K' J& u: y H platform_device_unregister(&da850_evm_tl_leds_device);# J% ^/ D/ K# [( G& a0 X, L* S
- N" R( G" s+ P2 q2 A% Z printk(KERN_INFO "LED unregister!\n");
7 d" }- N/ Q6 \' e}
9 |0 s: o+ P4 S8 K- U! e2 H1 J8 L
module_init(led_platform_init);( E6 A+ A* w, D4 d: z
module_exit(led_platform_exit); y V( m+ _( V7 E1 G% n
8 b. |: s$ E1 I& ZMODULE_DESCRIPTION("Led platform driver");
) H( w, H% E+ w! ?. j1 ?" YMODULE_AUTHOR("Tronlong");
6 U: k9 X+ X4 S/ ~& E% RMODULE_LICENSE("GPL");2 k9 n. ?& k, v) w7 w
1 M" Y$ h2 w; E$ z: h3 g |
|