|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ B$ V* i9 e( l' T5 ~' ]7 M
#include <linux/init.h># X5 ~# l$ t' d/ I+ Y
#include <linux/module.h>
4 O; n8 A7 k; I9 g! ?/ j2 Y$ J#include <linux/kernel.h>
& ]4 D) O3 S! a+ O" {8 n#include <linux/types.h>
- K! ^7 C# [" K#include <linux/gpio.h>
1 I' O% O' E; _ a' g#include <linux/leds.h>1 O% v" {1 H/ F
#include <linux/platform_device.h>
0 f8 Y+ ~ R' ?: ^
3 H: i4 ^4 B- q4 K1 J( U# [#include <asm/mach-types.h>9 ]2 }; ^" _/ c/ q! h
#include <asm/mach/arch.h>
1 T; W Y, a) { O% Q#include <mach/da8xx.h>6 ~+ p' m1 d, C `. }' }- h, Y
#include <mach/mux.h>
+ o% z6 C& w9 F& x7 ?
3 s/ n/ t! n! R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 `' a0 g4 B+ q* g, d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! S: a* [* C+ s
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 K) \& u/ C( T! J, @#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, z4 `/ j/ M; `% e# g, P9 U7 @. Q0 {" S1 o7 m+ Z
/* assign the tl som board LED-GPIOs*/
5 k% C+ }" F# l7 L) b- u. ]static const short da850_evm_tl_user_led_pins[] = {
" D; T% t5 W& ^! v6 C /* These pins are definition at <mach/mux.h> file */
* e0 f& ?! F* C8 k! e3 t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- B# _/ G( N3 ]6 {
-1$ S* n: Q8 T' v7 h! T* f1 d* {
};8 `0 ]# _% a2 {
6 y/ \ c( a; F/ i0 S" e1 ?; P6 ]* qstatic struct gpio_led da850_evm_tl_leds[] = {
# x* l( d. R$ f. X {
8 x$ o( f4 A% X: n6 C .active_low = 0,( j! s J1 f& n; K9 X
.gpio = DA850_USER_LED0,; o& I/ Q; z) A& R: O5 J) ]
.name = "user_led0",
1 S3 a& M8 R U .default_trigger = "default-on",
$ q( [6 @4 _3 i3 N },5 ]7 l4 `9 R& z- n1 a
{. e6 A `3 J$ f6 c
.active_low = 0,6 S6 i* \2 Y, M+ b! m3 K& W* q& m- G
.gpio = DA850_USER_LED1,; Y: B/ @( F3 m) E6 D+ t) n% m% w
.name = "user_led1",
- f% V3 \" Y2 p* e .default_trigger = "default-on",& l) w+ D, E+ B" q+ P0 A( g
},2 E5 z7 b/ r, u/ q
{
0 I1 h* v! e& b |: l .active_low = 0,7 f6 ^4 u* \, k! ?+ Y! y
.gpio = DA850_USER_LED2,
, L5 x. f7 G! ~7 O5 {4 ]! Z .name = "user_led2",
" X7 y! _1 n! f1 i .default_trigger = "default-on",
1 d7 e5 ]1 ]7 k2 u1 v" \ },
/ s: a/ Y E& [/ k. ]5 X- s# t {4 D% N- v& C$ F. c
.active_low = 0,
s. c) X* V" t/ i8 | t, J .gpio = DA850_USER_LED3,
, U; h; o1 F( ^4 }, { .name = "user_led3",
- ~! J8 N, p0 p1 { s& ^4 ^ .default_trigger = "default-on",) o, M' B7 T: J( v$ z! K
},
1 q+ u3 W! Q0 Z7 V; ~0 M};0 I( C. d2 C9 x4 S r
5 e9 k) p- b3 Y# Q u9 t
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! Z: G4 q! _6 A' c3 s; i, c) C
.leds = da850_evm_tl_leds,6 K q' U& ]$ V* y# J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- Q: a- S. ?" B3 q6 `$ }};- C( k5 m; g$ A8 g. q
3 K* X. Y5 _+ l# t, d
static void led_dev_release(struct device *dev)
& R8 w9 _0 Y! t6 K( r7 {, p0 ~5 Y- a{( \1 W# |9 F, w' n
};
( v9 K- [# c. w/ L0 s
9 c: N+ ^0 i' W# R! [# p) N2 Vstatic struct platform_device da850_evm_tl_leds_device = {# Z& d% q6 j& l9 p/ C/ L1 b3 J( T( M
.name = "leds-gpio",' k' x3 G0 n6 v$ {7 ^1 _& o2 x
.id = 1,$ i7 ~ A% y" y1 ]8 M
.dev = {& V% j4 A# e% H3 H4 d( K6 o
.platform_data = &da850_evm_tl_leds_pdata,
/ @7 G( g# ?( l. P .release = led_dev_release,
, A+ U- q, A+ \& s* L }
7 m) e$ u! O0 K5 k" l' y};
3 }& ^- I. P( e' j+ f D9 w. g8 _- r5 S' u m
static int __init led_platform_init(void)
* }! { P# I" |) |8 m N{0 D+ @9 D; _7 h9 _9 o
int ret;
5 A" o% e1 M1 \. J, Z7 X3 [#if 0! B. p, z9 ^8 M- `; A0 |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, @0 e6 E& t+ ]: s
if (ret)
, b' _ w# u% v( ^9 y( w pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* t9 @ z1 y- X/ k1 F( E! T5 H' S "%d\n", ret);9 C; n8 E7 x5 |4 T3 K
#endif4 ` k& O# O5 U E
ret = platform_device_register(&da850_evm_tl_leds_device);
# V$ f5 d/ v3 W0 @. {6 j: ?; e" v* z if (ret)
& b _* W( F" ? L pr_warning("Could not register som GPIO expander LEDS");
# t. U/ t3 M8 g else
1 b( q4 {: F% W) H5 L printk(KERN_INFO "LED register sucessful!\n");% m$ J1 Q4 ]- a
) I2 L' I2 q* f8 g9 K2 Z
return ret;
- E5 R; R v0 k. f- `4 h}3 w. M9 s& E9 q' B. S( X
9 D& p# L$ m& O; h% G* ]' Ustatic void __exit led_platform_exit(void)& Z# c2 `' w$ g
{
0 l! u9 a/ }4 t2 }# H* N1 [ platform_device_unregister(&da850_evm_tl_leds_device);
! X# h9 c4 h, V. D) R; f* c
7 g0 y( x3 L( [# i9 T printk(KERN_INFO "LED unregister!\n");9 Y3 n6 c0 t% y, {0 ]- D" J! Z- M- l
}
3 X) a w( f' R. ~: e
3 C- C/ X1 Z( Cmodule_init(led_platform_init);9 p) }0 E8 H5 e2 C$ e: P
module_exit(led_platform_exit);
1 U& T Q+ \! @4 K- `' s) N2 i$ Z& d" S( f4 m: t/ _) J$ ]
MODULE_DESCRIPTION("Led platform driver");
# w# `0 E, M6 j* X0 W: w9 q3 oMODULE_AUTHOR("Tronlong");
) m" D3 R+ n% D. `; R4 bMODULE_LICENSE("GPL");* V( ^# z* X5 v+ k; j4 X3 ]) F
: I$ l# T3 k9 O7 W* x
|
|