|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 Z* ?! L. M$ A" S+ m/ j
#include <linux/init.h>% ~1 v1 y- M$ F+ r( d
#include <linux/module.h>0 K' U* y4 ]5 g5 O
#include <linux/kernel.h>
: V# }' g% P' W8 W#include <linux/types.h>
7 W. \: K; ^% A4 m4 k#include <linux/gpio.h>
5 ?0 b& Q) I. ~* j#include <linux/leds.h>
5 U* a6 g$ y. x9 D6 t: v#include <linux/platform_device.h>
0 m3 o a- T$ t- T* l! @/ w4 v# z" m! A
1 o. {" z) V$ H& D |#include <asm/mach-types.h>
; ~3 C: z! F y6 l$ t7 l4 g#include <asm/mach/arch.h>* u' R; L" Z6 }6 G* O
#include <mach/da8xx.h>
0 G0 y4 ^! g% F, _1 r#include <mach/mux.h>
5 Z6 A8 {+ k6 |: }0 p
/ Q7 b; q! ~' o( G" [2 y1 P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! g& Z- V' k( W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ n' E: e4 {) G. v- J#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- B2 y( H( s. G' d6 m3 `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, R3 n z4 _/ }" M" e& y
}7 ?" p: O" @5 z9 n& t/* assign the tl som board LED-GPIOs*/
/ Q6 N# j- n# _0 Z4 d3 Z- w( Bstatic const short da850_evm_tl_user_led_pins[] = {
, C# j T. L' [$ ] /* These pins are definition at <mach/mux.h> file */
4 r( ]& ^; Q2 C; L DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 k3 H) f0 @2 }( v
-1 b$ Z' g- `8 m3 w( I
};
+ C* |% j; G) t# f9 H' z0 o( K
8 x ~* M% ~5 C. Jstatic struct gpio_led da850_evm_tl_leds[] = {
5 f" K' y5 ]6 m. A0 w {
r6 b: X3 a" O4 M. l3 Q) Q .active_low = 0,
) r# C2 H: a" ^' J .gpio = DA850_USER_LED0,
& @1 ?& O- I1 z2 @ .name = "user_led0",/ P# R: |- j7 L" L+ f; I0 } I
.default_trigger = "default-on",
! @1 r$ V6 f6 @( ?0 \ },
$ ^& U- d9 i" \' k% l {
- ?% m t1 S% s2 A# a- ?) N( ^( ` .active_low = 0,
$ @3 H+ A# S! @0 V# X .gpio = DA850_USER_LED1,7 ]. }; F- Y) I+ r' I, @0 ~
.name = "user_led1",, ^6 G" C8 ~$ F/ G2 Y+ S' g
.default_trigger = "default-on",0 n" X7 x4 A! S6 Y V2 [$ r5 o
},7 i6 Y/ g' J! k. \3 W5 R7 i3 t
{0 R% E& u6 m1 z. t4 A N8 z" f
.active_low = 0,. [9 _8 y ~. H% x8 U# k* T& y
.gpio = DA850_USER_LED2,
) N+ X# K8 Y0 W5 F# v7 J( F .name = "user_led2",0 S$ h0 {" \ n$ v9 b
.default_trigger = "default-on",
9 I/ u) D, }7 Z6 d. S& Z },
9 F: H2 L. p; d: f {9 O- M) o! T: ~5 g7 l! Y+ I! L7 G6 p
.active_low = 0,, l* X7 I9 k2 X p
.gpio = DA850_USER_LED3,
" x/ Z$ i% G- Y% N, w6 n .name = "user_led3",$ \; _! E" A+ i L
.default_trigger = "default-on",! g$ n4 g2 V* `* H+ J2 H: Y
},
" l0 W: h) Q* A" p0 |};
+ W6 k9 s5 l2 I6 [7 e) Z7 f: z- l4 s& i: h. F5 l* l1 s, ]
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! F3 ?( w# q i! F .leds = da850_evm_tl_leds,) w1 E/ J$ y5 v- s# E" [* g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& z6 U$ H- ?+ ^* @3 C( ]: ^
};
1 u( Y0 J2 V9 H4 C$ A! D
. t+ k8 y5 A$ N+ n( Y3 y1 Zstatic void led_dev_release(struct device *dev)6 U [- e4 K g# J
{
; p/ P: i, }& ]& O! Q# S6 v( F+ m};
! f1 j( f5 P9 [, S- E4 t8 j! Y2 \# n
static struct platform_device da850_evm_tl_leds_device = {- ?* c9 r x7 r9 R
.name = "leds-gpio",/ z/ \. J4 T9 d6 ~0 Q) D
.id = 1,
7 \7 v! w4 m3 E" f9 } .dev = {
: _. S" A* O* e2 L4 M \5 r .platform_data = &da850_evm_tl_leds_pdata,% D" h5 S8 t2 d7 a
.release = led_dev_release,3 y: s- B0 R! h5 [
}
" Z' @3 w* { P6 C};8 _. P j+ g" i! j6 M$ i; o7 K
% T' q# `% b/ z9 h2 h2 `' {static int __init led_platform_init(void)/ k% B( O/ X- v, ?3 B
{8 O Z- K3 J" A; h1 w
int ret;* {7 u$ [5 ]4 g; m( D
#if 0* _" Q7 F2 y* m9 u1 C! ?! i
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; P: E8 l% @5 L9 a$ c if (ret)
% e6 Z# p1 f% z+ j! N pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# S& H, m; x( i "%d\n", ret);
9 G2 q/ E2 E9 X#endif$ _8 g( Y+ k7 |0 T; O' g6 D
ret = platform_device_register(&da850_evm_tl_leds_device);7 k6 o3 O0 S- o& I6 r3 X) j
if (ret)
2 j) D/ p- E) [0 |, o" u5 t- F$ X pr_warning("Could not register som GPIO expander LEDS");* a; Q. b" i8 k; I* U0 H/ w
else
+ Y6 I" |' m& W r& N; Q3 Q printk(KERN_INFO "LED register sucessful!\n");, k, i2 P7 |5 k5 `; d% `
: a/ G$ e) k' C2 B9 |2 `8 T- r0 i return ret;6 I$ g+ E1 b: P8 U9 }, H; n$ q0 @
}
8 J3 O% F. @: E p$ w) ^2 g; m% Q
static void __exit led_platform_exit(void)
0 [4 ]' s: _9 {: d0 s0 G% z1 S( e+ Y{* a' p) V$ o$ r4 ]
platform_device_unregister(&da850_evm_tl_leds_device);! i2 k3 A8 _- [$ z; M" g: n
! j' o& Z2 G/ S3 v! `4 W7 x( j8 H
printk(KERN_INFO "LED unregister!\n");
! B: P; Q6 V. }; `% w}6 I2 A6 U% I2 l- ~
0 z5 o) d8 b O" \" e
module_init(led_platform_init);
8 |8 k% l6 V5 [module_exit(led_platform_exit);: @# D/ Q J# }0 S
2 [1 d# g0 Q* ]% ]5 g0 K$ c
MODULE_DESCRIPTION("Led platform driver");" ?; ?( q$ U5 P$ J" f8 H1 x
MODULE_AUTHOR("Tronlong");; T' e/ {5 p' R- J2 s/ y. z
MODULE_LICENSE("GPL");# Q# x) f( r" Z& A3 B
6 H) S, E# R9 {/ O% a3 _
|
|