|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 f$ w2 k. z1 p0 A+ q
#include <linux/init.h>
2 z+ W9 ]3 b) [- @: t5 Y#include <linux/module.h>
X2 G( X8 k7 c% t; {# Z# t#include <linux/kernel.h>
1 t5 ~' B4 P6 C#include <linux/types.h>6 Q# Y3 p" }" S: B- H6 c$ P/ w
#include <linux/gpio.h>
' J- @* {: [7 s, N7 |% l4 Q/ e# |#include <linux/leds.h>4 l5 a! K% }1 w! h$ W
#include <linux/platform_device.h>- P9 Y& P! y' v5 h, |% C
1 w3 ~/ W2 B- ?6 U#include <asm/mach-types.h>
3 w! p% }$ e) g: a#include <asm/mach/arch.h>( `0 ~( j% k- H" p- I/ T- e
#include <mach/da8xx.h>3 c% q+ w! J! c7 M2 G8 ^& g: a
#include <mach/mux.h>
6 n& j& C. }4 z% L# L9 P3 D' a4 y1 S5 E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) A9 Z- i- A# F% O# K! j2 ?2 `9 E#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 c& K& s! r4 q3 ` I) z' l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 @0 N) M7 z: m+ @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- x- `& N( E! G
/ t6 x6 @9 Z. \" t, i
/* assign the tl som board LED-GPIOs*/
/ D; V; X7 z% T, a' o' c2 wstatic const short da850_evm_tl_user_led_pins[] = {( B8 X5 f( n# ?. |4 D4 q. ]
/* These pins are definition at <mach/mux.h> file */, a& B& p( [. m# ~6 K( t$ ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 I1 l) A2 _+ x2 P -15 ]! c; p4 x$ R
};; F" O/ k9 m! p" V0 n! C8 h
0 Q2 w1 r, h4 Z8 P$ L* lstatic struct gpio_led da850_evm_tl_leds[] = {
7 A/ y( _* a: K" c+ a3 N {
4 C/ E( }- x3 ]1 w5 n1 l .active_low = 0,+ Z6 m% J7 h0 M, P
.gpio = DA850_USER_LED0, V5 j+ Z7 Z- O5 l# N
.name = "user_led0",* i6 B+ \1 d# q4 y4 V! t& u% E' i* w
.default_trigger = "default-on",
( P3 H* Q1 I3 t4 Q) g" B, M },
: e: V% k4 U. Z" _+ g {3 L# G" q& N% W/ S" f3 o
.active_low = 0,
2 u" _, u* h8 V3 X( ^ .gpio = DA850_USER_LED1,! @, C. { z1 ]
.name = "user_led1",
& Y5 z5 n( {* T% j .default_trigger = "default-on",6 o! N2 E4 I% T
},
3 P- N& F0 @: d& ]9 e& V; n3 m {
# O9 C8 n- T. M3 P$ Y0 {/ m! `3 R .active_low = 0, g4 s4 \5 G! Z* t9 E" \$ t
.gpio = DA850_USER_LED2,( @6 t: ]/ c% W
.name = "user_led2",# h9 ?2 F/ p1 E8 q9 B% s
.default_trigger = "default-on",
- z2 W! ^! p* {+ G# ? },
# y3 C- P0 O7 E5 j; n {
( N4 U% z" c# |# l* |: P .active_low = 0,. B% S- j# P3 ?' k) n0 _1 k
.gpio = DA850_USER_LED3,9 l, i1 P% D9 u, o
.name = "user_led3",
* B( ]( F1 c. p" S7 ?9 I .default_trigger = "default-on",
8 e1 F6 N) Y7 K. I5 ~% K },
' k2 H5 [& Y. w* v};" @3 e# P2 ?% p. P; w6 u% \
9 J( H+ ]3 G" ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 ~ r: S9 b* |% @" h .leds = da850_evm_tl_leds,
0 r( n& X* [) N V3 W( N1 F! w. c .num_leds = ARRAY_SIZE(da850_evm_tl_leds),. x) ]" N% X" j" V. n% \
};
5 I, ~3 c8 K* E, c# {0 s+ Y$ |7 m @5 `, U3 s+ \. x" ~, a! ]
static void led_dev_release(struct device *dev)$ E7 j, j' n9 n
{
$ g, @6 f& \) C. f( L9 p};
; g9 ?$ c; P+ k6 k8 k! _% P( C% N4 @- @' Z1 s9 \' T
static struct platform_device da850_evm_tl_leds_device = {
7 `# M0 k. |3 _0 Z .name = "leds-gpio",
) Q- J/ V! E, [+ {: b0 z .id = 1,
7 u0 Z3 X' }/ E! B H5 ^ .dev = {. }. f ^) m% @
.platform_data = &da850_evm_tl_leds_pdata,2 D3 H* r) g+ g$ B5 v- e) l) C: o E
.release = led_dev_release,
' U! Q$ q9 t( t9 `, U2 G! U! E }$ A+ v! V& |! @9 q/ z$ Q! Z
};
# M- r2 u; j% ~7 M' I; r" U
h2 X* f- ~1 w$ S- V+ S% mstatic int __init led_platform_init(void)
) }: W8 j' Q) O0 [6 W7 j1 S{0 `/ S, q1 ]& a$ w0 Q
int ret;! `4 n4 ~0 \) w- r0 `' ~9 g
#if 0& o- J2 Q! J" @5 I o! a+ [
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 g2 I: N" e9 s! K: e if (ret): x S, O3 K& s- b( F T% h5 j
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* x9 Z4 E+ L! Q, E8 G% p" v4 H4 T
"%d\n", ret);
6 ?' J0 a3 u$ F$ i, j& H0 v% F5 y' M#endif2 `! u" l! T' a0 i7 W+ m
ret = platform_device_register(&da850_evm_tl_leds_device);9 t- w& @/ u" _3 E+ G
if (ret)
, W6 G3 G' y2 X0 Y# Z6 v! A pr_warning("Could not register som GPIO expander LEDS");
/ D6 v- F8 [+ M. C" m4 o else
6 S8 v8 R1 O% K' F9 O+ a printk(KERN_INFO "LED register sucessful!\n");
! i! Y: Y% e6 ^! c: Z) ~) G1 d4 x5 }: j
return ret;" q* t& Z3 r0 @ }% d
}. Z- }: w( A* L, i% g
# M [! {9 {. W$ F: o4 o
static void __exit led_platform_exit(void)8 K; ~( O$ x$ F. {. Z, d
{$ l$ M0 Y% x4 v/ @8 c; G' {
platform_device_unregister(&da850_evm_tl_leds_device);
$ J: L/ [% r. K8 {! C
: k8 y+ U! V' ?# J0 w printk(KERN_INFO "LED unregister!\n");7 P" P: _1 }% |/ k+ S/ ^) w- Q, N
}
0 m% i7 s! D5 r' H4 d! t2 ^; | _, n
0 V0 K; u# g3 J" q5 t. N7 smodule_init(led_platform_init);
0 T9 @# J7 T1 T0 p( g9 s. l+ cmodule_exit(led_platform_exit);
' a+ {% U* u9 V: M/ W" b
Z' U3 D# {6 x/ L2 PMODULE_DESCRIPTION("Led platform driver");
" y" R1 Y& ^" e" B/ g/ X2 _MODULE_AUTHOR("Tronlong");1 M8 k/ L& @" b
MODULE_LICENSE("GPL");
. i( s: A! W4 t# X
# m5 U% z/ x8 h5 C |
|