|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 F$ e5 s( q1 i+ k: v: [" V#include <linux/init.h>. F$ a. ~% T) w9 b% r. f1 |- j4 v) o
#include <linux/module.h>: M1 X2 |1 i* Q/ c
#include <linux/kernel.h>
$ v( p5 k7 h Q2 P#include <linux/types.h>! S' u$ `1 ~$ a& o/ ], R7 K' O$ }8 |
#include <linux/gpio.h>
# ?. t& W& t4 B, ^: T9 A#include <linux/leds.h>
" G9 K, k {( F#include <linux/platform_device.h>
2 R2 ^9 m z/ B6 V; Q8 i
; u4 c! J) W/ ]7 |% y#include <asm/mach-types.h>7 _. W, L3 n/ D' i
#include <asm/mach/arch.h>
) K: o5 c) _6 G1 P0 _#include <mach/da8xx.h>
( g5 o# E2 G! ^#include <mach/mux.h>- R0 ^9 q* M J2 K3 n
6 [' M- _+ w5 H. ]
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- k5 S$ L2 G y5 c9 V' X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% n5 _5 _; g; J% W& ~- ?8 q5 X
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( _/ P, o( G4 n; R1 F7 T" {#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 a6 B* v1 T$ A% X9 V" s
: m) R# T% I5 w5 [7 l% n: \/* assign the tl som board LED-GPIOs*// {3 I9 _, c$ R8 E
static const short da850_evm_tl_user_led_pins[] = {* Q- H" E: X0 d+ W/ N2 H3 J' F
/* These pins are definition at <mach/mux.h> file */+ ]# {8 |5 l1 p- l7 T' ]; ]( g+ p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 A% M1 R; e3 J) I! K0 e# B -1* R8 Y# Y1 H5 S2 E
}; B5 t" }7 ^4 d4 {
( u4 D' r! M2 D+ a( r$ G
static struct gpio_led da850_evm_tl_leds[] = {" s! g1 E8 m1 Q& K$ e4 Y; ^: {$ F
{
7 m3 g5 h7 {9 P .active_low = 0,
: Q J# V1 V, B; U' P5 D/ }, n& M .gpio = DA850_USER_LED0,
% O7 o$ s3 `- O S .name = "user_led0",
# ?3 E6 x: L5 Q* s3 H: Y* t( h, T .default_trigger = "default-on",
) H6 F% w: ]; }1 y9 G* o" Q },
3 P" p; v9 A0 i {7 i5 A! _3 {5 y/ F/ d
.active_low = 0,
$ D+ u# v6 {* s$ u I .gpio = DA850_USER_LED1,+ X) Q4 n9 k. j9 M" \
.name = "user_led1",
/ ]6 M0 m* W& W/ W, B; n .default_trigger = "default-on",
" _* }% o; m7 G# f: A },. y5 Z' u6 F) J
{5 W' O2 o7 y7 i0 e
.active_low = 0,
0 r- K8 J& Z. W ]& `3 I+ @% h .gpio = DA850_USER_LED2,, V, V$ c/ ] a& I& g# |. |% ?
.name = "user_led2",& U+ ]$ U0 v) v [$ t% q. p
.default_trigger = "default-on",: d _2 `8 P" X0 G/ P6 x
},7 E/ ~% z! ~. U. r, K, a
{
6 g1 G6 Q1 ]( O4 | .active_low = 0,1 D2 T; G3 R8 u0 V" c/ o, N( a% x
.gpio = DA850_USER_LED3,8 R9 i9 `8 x k6 Y
.name = "user_led3",8 g8 C* u( u/ L8 E$ c( m# p/ q
.default_trigger = "default-on",5 l8 Q+ |5 ^0 w- a) r3 r' s' ~
},/ N8 O4 H3 _, b/ x. W2 h
};0 O$ r1 J9 _3 Q( n) i& M
* K1 X8 B0 ~) ^# h+ \& I. Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- `# t$ s+ U/ G4 g$ [5 _
.leds = da850_evm_tl_leds,+ p9 J0 W% R: ?( w' Q2 e
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 {! h. l. `1 O0 q8 p( }) z};# r- Y( L+ {$ O1 f3 j" F6 R
& U3 z# l S0 d, f. v a* \3 ystatic void led_dev_release(struct device *dev)2 [* e# m4 b" l# _, f* R* g
{
2 Z; {! I0 }$ ~9 @" O};9 s+ V- Z6 ~. i4 K1 ]9 \0 k
, g9 [9 C- o t/ ~- N9 m' j, ?
static struct platform_device da850_evm_tl_leds_device = {
, p( _0 j. ^. P' L1 B3 Y .name = "leds-gpio",$ L ^' E+ {: E5 u: n. a
.id = 1,: S# M1 o! q3 g k0 X
.dev = {
9 |0 h$ O$ d! ~4 g, q# V7 w .platform_data = &da850_evm_tl_leds_pdata,
0 [* T; K3 w( U7 Z, d% p" p .release = led_dev_release,& E7 S1 h$ A; Y
}
- v; v' T1 L0 q1 m! _( @};# V* @( a, F( `+ `4 @
0 n3 ]3 g8 X6 H3 B R# E0 J; estatic int __init led_platform_init(void)
+ J2 C% G+ w, f3 J" A/ x{" \$ U6 m) p0 ?, a
int ret;
. D5 n. b, d+ _" X& a# s#if 0
* ]1 R. k9 |) d8 s2 r! p2 e d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 G/ K2 `8 h3 E if (ret)
4 @5 Y! c% E& W2 f pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 z% x3 Y+ m2 [9 |" V' _, _: t8 @ "%d\n", ret);- u8 m% W5 l1 B$ \% Q1 J
#endif
. D c2 L0 @; T ret = platform_device_register(&da850_evm_tl_leds_device);
6 V* P6 J( {4 S' f0 K if (ret)
; ^" i- s2 v$ d4 D' S pr_warning("Could not register som GPIO expander LEDS");
7 m' |7 W1 U i4 c else3 `* o, N. \" g8 o) d9 O
printk(KERN_INFO "LED register sucessful!\n");& [& b9 [! b; P9 @/ I
! K* J% a# G$ i5 H( }- d
return ret;
9 ]4 Q) b# ~& r}
$ s v n# D; `8 g0 ]9 Z% b' m3 F N: }+ A$ h3 ~* n$ w5 n
static void __exit led_platform_exit(void)
/ N# K3 C: d9 d# W! o{1 c/ U' R0 g* N6 x# B/ Z
platform_device_unregister(&da850_evm_tl_leds_device);* @: ]4 A$ j! \3 A2 v, w
' c; P; j' z! ~, v
printk(KERN_INFO "LED unregister!\n");
# ^+ l' l( Z. y) |* a2 k}9 E: o) h: r$ n( o+ O" k6 ]
1 ]+ {6 x) W4 Y9 B& ]$ b0 Imodule_init(led_platform_init);- p" T) v3 L/ H, d' a
module_exit(led_platform_exit);
4 m. a; }5 P! }7 l" _5 `, D' S) z% M, d. K$ n6 S% `+ b
MODULE_DESCRIPTION("Led platform driver");2 X- v5 d/ x/ F Q0 N
MODULE_AUTHOR("Tronlong");' Q9 l' P3 N3 Y: ?+ R
MODULE_LICENSE("GPL");
0 N. a% \* N; L1 D+ Y6 j
( v2 }2 V4 k# ]" A3 c |
|