|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) j3 ]9 D. `0 C3 V; @
#include <linux/init.h>0 W. M( `5 u+ M% v( P2 a; ?
#include <linux/module.h>
- P* D- l2 w4 g# c& O1 \$ s#include <linux/kernel.h>
7 H9 F% L2 a5 e4 D. }9 ^2 r' U#include <linux/types.h>
( P* v+ }- i* X% a" M#include <linux/gpio.h>& R# y. k# m7 I5 h! Y' i2 K6 _3 s
#include <linux/leds.h>( T) O6 w# D: o8 r3 ]
#include <linux/platform_device.h>( B j3 x& X ], C
$ j1 r9 u# n- h( u4 D6 E6 m#include <asm/mach-types.h>
# l( i _% e0 c3 F |- P% u#include <asm/mach/arch.h>
, G4 {1 ^# [/ l1 Y#include <mach/da8xx.h>
# T. X+ I8 n9 ~. m2 |5 V$ O#include <mach/mux.h>8 \% A! F; `" z- k* r0 M! C% |
, Y o/ b. E7 x* h2 r* t. o6 a" p A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 n3 p( ]# m8 Z+ [0 [9 ~. S
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 H1 H8 h8 s5 E3 P) J8 t, C5 _, r$ r
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, {' v7 K, t$ G+ }2 N' O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ b [8 `5 y: \1 O
$ T7 b: k, [5 Y% G: J! Q/* assign the tl som board LED-GPIOs*/
9 c, B7 [, L1 i# n" _2 Kstatic const short da850_evm_tl_user_led_pins[] = {
( U& g+ E9 S$ B8 G. k$ M /* These pins are definition at <mach/mux.h> file */* }1 N+ l" ]6 y8 P% q/ |! J9 a
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# J* P3 A x( O$ Z4 J u& H. g+ v
-1
6 n, W0 y/ M8 y4 T2 @) }# F};
3 I+ y! S% G% k. b4 b' m+ W$ j* O( U+ n
Q8 o/ M$ n" q( y8 {; d; `static struct gpio_led da850_evm_tl_leds[] = {% E* y/ M" @: X7 |6 C% o7 R
{4 k: M0 W' h4 ~& }, c* j* h
.active_low = 0,
1 F' v: m- p8 j. p, B) V7 v0 W( ^ .gpio = DA850_USER_LED0,9 ~4 R! \2 P" q7 M; K/ ? j- k7 x
.name = "user_led0",& G1 _! m G0 U. J0 w6 d) y
.default_trigger = "default-on",* P' t5 H- l! [) `8 F
},( ]$ j8 q. K1 }
{0 d* L8 K% Q) W7 p
.active_low = 0,
+ j4 r/ d; _1 a/ m .gpio = DA850_USER_LED1,. G$ k0 f. P2 I: N
.name = "user_led1",2 p4 K" R5 n) b0 i
.default_trigger = "default-on",
" S6 u) I3 v+ S7 }- V },. k7 G% |7 C @8 X) }; l) [6 J8 n: k7 U
{! w# o; C0 o: e0 v2 t8 ?' x T5 v
.active_low = 0,4 U+ W+ C' x' y
.gpio = DA850_USER_LED2,
5 f, \ |* k; e. C7 A- Y .name = "user_led2",* G+ a# s, s2 T, z9 V
.default_trigger = "default-on",8 W8 \: Y r% u$ }5 B: @! n6 S
},
# _6 C+ M6 W7 \- F {* f& _0 |: R; z: \0 g# k" [
.active_low = 0,: H! V* I; _% v2 v( |* O
.gpio = DA850_USER_LED3,
% }* Z8 V3 K0 y# O q .name = "user_led3",6 t' S! j/ F7 j5 r* A, s6 M2 F7 q
.default_trigger = "default-on",' d3 ^5 v7 q3 f# R* g: H
},
) E1 u9 p5 P, E% ^0 j( H};
) k6 m: i6 o5 X) t2 s$ h3 A1 Q; x) L P, N1 Z* w
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 z' Y0 S, t: B7 v# m3 _, h
.leds = da850_evm_tl_leds,
9 e& G0 g. T' d& @: f: ` .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ v: d% f: K4 P K$ J3 Q
};
# E5 p# n) h3 X2 m" d$ B
4 U% f+ n# [: o, l$ Pstatic void led_dev_release(struct device *dev)
! v1 a+ ^$ D$ D6 n2 W{8 W# _* F! L+ X
};2 N i% L4 q' t% o- |
1 J+ F# q4 {. R! Astatic struct platform_device da850_evm_tl_leds_device = {- z5 \% I& i. y) u' P/ ~
.name = "leds-gpio",, I3 l, N* ?/ B V3 Z$ b+ N1 i$ n! Q6 K
.id = 1,3 k. U9 p G! B' K% b
.dev = {
6 M. C9 E u y2 ~ .platform_data = &da850_evm_tl_leds_pdata,, k) W( O& `( p, J& @$ u
.release = led_dev_release,( Y9 s0 k$ Q& P1 ~/ a# u
}! u. s3 j# v) J) ]& r. S# @
};3 r" v8 H/ c! e/ Y. @" u
6 c3 j+ L. y+ o. E2 }3 F: pstatic int __init led_platform_init(void)1 V; U# ~2 R1 k/ h, B
{
k2 @- F% ]8 z$ f; ~4 o9 o int ret;8 t7 A, T& o; G: F+ B
#if 07 b+ n# x! A: G9 k
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# @6 O0 R( e; |% @9 Z. y# ^
if (ret)
, A5 Y; |) }2 C" J m; q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ S: h% w& M' s# r: U
"%d\n", ret);
' ]9 w0 J/ n( n. E7 x' X#endif8 H) e, I5 e+ F0 ?
ret = platform_device_register(&da850_evm_tl_leds_device);
f: m) [* A: j( p- H if (ret), k& d& b3 F8 x% R+ M/ ?
pr_warning("Could not register som GPIO expander LEDS");1 W6 ?! g/ x3 B- H# i. E7 ~: N
else
+ n& ~$ j, u, n% s& E% [ printk(KERN_INFO "LED register sucessful!\n");
2 z Z2 O7 C6 d3 V4 x
f! L# W+ u7 t' H; B' Z0 M( G+ O return ret;
5 B, I: J- P8 S) A3 J+ l1 ]+ Y}
c6 P1 z, s* w; a6 Q) A1 V7 l* I' L
4 K1 @$ ]3 o k7 p. Ostatic void __exit led_platform_exit(void)
' L) h% K) N- {( L g1 V7 ^ g0 E: E! V{1 ]9 `' O9 N8 L) H; b, _& M% [
platform_device_unregister(&da850_evm_tl_leds_device); W+ Q/ [2 ?- D4 J& V
, d! b! B- D% @& s: H0 F printk(KERN_INFO "LED unregister!\n");3 A( X5 ^" V' k2 _* s
}
. n! p# f: T7 }2 L2 R
* ~+ u% |5 ?* m# ?7 C3 Wmodule_init(led_platform_init);& I; k0 |0 I" K5 O/ p
module_exit(led_platform_exit);
+ W7 u) [" n4 _6 u V
& S* m: t9 k( E7 N3 d' yMODULE_DESCRIPTION("Led platform driver");
! z1 d+ J/ A& _8 i. g; A: M% ]: x; i# _MODULE_AUTHOR("Tronlong");
I0 W# J7 l. ]7 {# d! KMODULE_LICENSE("GPL");* W5 m: O/ Q o
3 z* w# {7 y) \- l |
|