|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: x1 X1 \3 O/ M. b
#include <linux/init.h>) Y% G/ ?% s! @' r
#include <linux/module.h>
5 ^. o2 ~" p; i$ P f! o: a#include <linux/kernel.h>
1 |* b! Q; m5 F) } j# L. U#include <linux/types.h>
9 V' `; p+ O: v. _#include <linux/gpio.h>; H& _9 b& C; I# D
#include <linux/leds.h>7 _3 X3 w* u/ P' B
#include <linux/platform_device.h>
1 u( h9 l. T. H: e X
3 n3 g% d% k% V a* I) s#include <asm/mach-types.h>
8 R9 ^3 n+ a# Z- A$ F#include <asm/mach/arch.h>
. J' p& j3 \7 X- F#include <mach/da8xx.h>& a7 [+ M' s! C: D2 q
#include <mach/mux.h>
: V- C7 N/ c4 A# [ V; F3 i
* v2 _9 x2 p) j5 a3 P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" `: O0 f) p: p* T8 U#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% [/ A- q, z; L# x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 [2 B2 D( [! j4 M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ M% A; s1 R4 C6 }2 I- t; m% l* j2 N
) O# j0 j: b, i9 F! f8 Q
/* assign the tl som board LED-GPIOs*/( [/ L7 b( B) B. N3 D
static const short da850_evm_tl_user_led_pins[] = {
9 I a0 Q4 F5 D: m/ Q /* These pins are definition at <mach/mux.h> file */" ?, i1 ~0 Q) ], h
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, a) u3 v1 z; `" e5 [" p4 k -1
& H7 R8 }; ] N+ ]6 T};# I. U$ _( t `; q
; V; q3 E! L: `+ s- Bstatic struct gpio_led da850_evm_tl_leds[] = {' A* X8 @7 k; R6 A: h' I- D4 j, a
{
1 B! k: z$ ]6 t* ~( R, h+ j .active_low = 0, r5 r4 b/ M$ h5 w- v
.gpio = DA850_USER_LED0,
) |3 |( f: A' V/ u$ x# v7 l7 x .name = "user_led0",
. Z( A- y) ~; z3 D& {7 q- Y .default_trigger = "default-on"," K) d. E' C* |; \& n+ T/ Y
},
) l" M/ G: M1 A- I2 T. H, m {9 t# i6 Z8 c3 G$ x M& Q
.active_low = 0,' t. D; i( |1 A. |( P( ]3 q
.gpio = DA850_USER_LED1,' W; A4 I& u) c) i9 Q$ G+ |
.name = "user_led1",8 H& U9 o( ]( B' t
.default_trigger = "default-on",
9 [7 Z$ }4 `; o- {0 o. Z+ S },+ D2 t' k% L% d* s8 k
{: V4 `+ T$ @" w( g, W
.active_low = 0,
3 B2 S! I- s+ H8 D$ g .gpio = DA850_USER_LED2,2 M/ V. b$ T5 i/ f( z- R( \
.name = "user_led2",0 w) d7 H6 u; y# R% r, _0 v
.default_trigger = "default-on",/ u6 e* N) v; x4 c* l; _5 F1 ?( A
},6 Z. H* l+ [ @ f: l
{
0 @) b& Q8 r- S1 S6 J( q0 v7 a9 w .active_low = 0,
5 i$ P- }4 _3 Q" r& \ .gpio = DA850_USER_LED3," ], Q& m- V- Z" `- T. X
.name = "user_led3",* k* }: e) [+ L2 l5 ]
.default_trigger = "default-on",3 l: x! `* S' }! z- O* L
},
7 b) H7 v) q2 M( P' e};. }9 o( |7 r6 }4 Q! M o
3 p0 t _- e# [8 {/ C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 Q" z$ N, t3 |2 a; Y4 O, \ .leds = da850_evm_tl_leds,7 D4 j6 t, n3 c) q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),, ]( Z4 P0 |; V+ L% g
};) D- v1 f& _7 M: e% n6 }
) v" `- Q1 [" o+ v- `7 w: Z+ M# X6 [static void led_dev_release(struct device *dev)( r( [; G: d$ Y6 J) v, @4 {
{
& P7 {- z. D( N, F( _2 N}; \4 Z9 W# z, N* p
8 N( H6 P% I3 Z' T9 L- N* y! j: @
static struct platform_device da850_evm_tl_leds_device = {6 l. K2 j) ^- h
.name = "leds-gpio",
2 ^+ M# l% R1 ]2 V: v/ g .id = 1,
$ ^& r0 m4 O6 W .dev = {- O) r( b/ M' n3 g2 N+ K8 V
.platform_data = &da850_evm_tl_leds_pdata,3 j) I6 X$ P6 O! E
.release = led_dev_release,
+ F9 T0 L! z+ [& B }
% V4 e' O2 W7 o5 S};
- F9 l& ^( X9 q0 j9 K9 O' K7 l) l2 y0 \4 l8 f* a; L
static int __init led_platform_init(void); X( z3 @$ |! A7 v1 o
{
b @/ {/ [# O, n8 `+ | int ret;" J7 C3 N3 Q: X5 }6 L
#if 0
: _8 N9 @6 w( v/ h6 |1 B ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* p z B0 ]5 p if (ret)- V. ]: F3 }! e# J, l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" @: O, J9 p& x
"%d\n", ret);
" u0 R' m8 C2 D7 v#endif- R8 m9 ~0 S6 g
ret = platform_device_register(&da850_evm_tl_leds_device);
; ]$ _% o; V. W$ Q0 B8 a) f if (ret)5 y1 d/ \0 s( n0 m
pr_warning("Could not register som GPIO expander LEDS");
1 @5 Y& q& z! F$ z0 L0 J else
$ K/ d/ y: ~& N3 o0 W4 E2 x printk(KERN_INFO "LED register sucessful!\n");) d4 l2 R* k( N Y6 D
1 L) F" Z4 J: N. E return ret;
Q2 S- r9 t! y}# w% g2 h( i1 |" e
* {" T& O) y5 \. J4 p3 ]
static void __exit led_platform_exit(void)
- T! g. W2 @/ G/ i- |2 R{/ Y- k1 ~( K/ ? g
platform_device_unregister(&da850_evm_tl_leds_device);! r6 a: F; R8 _0 x( t% O
3 k1 g, b f8 y) Y% d! R printk(KERN_INFO "LED unregister!\n");
; j* O( n8 ~' q7 \7 y* Y4 G/ {7 p2 h: d}" k2 ]: a# V% a5 X9 v* Z8 h& m
, p0 S c+ c" tmodule_init(led_platform_init);9 s* k2 A) b( K; V& u
module_exit(led_platform_exit);, t( A" v! H4 V1 l" V4 }$ h/ M
1 D8 D: X, E1 k% @. t" Y5 z0 E8 A- B
MODULE_DESCRIPTION("Led platform driver");
- ~( n2 c9 v1 s2 B0 o$ y& oMODULE_AUTHOR("Tronlong");0 ^1 w& S& q* q- K& W8 b
MODULE_LICENSE("GPL");% T, h8 E$ ^+ H! a z2 z8 J8 j
4 @% c/ c+ e! ?) v! W& f |
|