|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% q7 {! g" M! P7 B- F3 M) A0 `#include <linux/init.h>, M% ~' c5 P* V6 b$ e
#include <linux/module.h>8 g. x I& P! X W
#include <linux/kernel.h>
& `: i; T {6 ^2 \9 c#include <linux/types.h>& _( B+ K2 z8 J+ w4 ~; p
#include <linux/gpio.h>
4 h' a; O$ B5 w' V& w- u#include <linux/leds.h>
" g; N4 R. b" r: G, ?# L4 E/ D#include <linux/platform_device.h>2 X9 i+ i7 @, Q e1 q6 z+ V
$ A! b3 m1 ?& e#include <asm/mach-types.h>) b' ^0 s, U4 U! X% d* R1 A
#include <asm/mach/arch.h>
C: m6 M4 X9 ]# S( B. C: Y2 n#include <mach/da8xx.h>
3 V: T, \# P4 v9 O( A#include <mach/mux.h>
, c; P0 c @0 j( }4 j* @/ P# n8 ^! y/ j% Q( S) e2 x3 V1 U0 c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- O8 G1 q; r9 p' G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* {. O+ ?2 d- @5 V$ m$ v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 c, i% @& A/ s `: z( X, [#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 R0 l& R. v1 T, B3 I" o0 _% {& A3 Y& P7 a( r& z6 Q3 m- Q
/* assign the tl som board LED-GPIOs*/
( Y# S+ k% \$ T ]& r E- Astatic const short da850_evm_tl_user_led_pins[] = {
; ~- z. U: U2 h3 S s9 F k% } /* These pins are definition at <mach/mux.h> file */
* A& o) y* @) a# Y$ p9 D W( i% j DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: B' H9 c, L( O/ A5 n -1
( l5 H' P% q3 K$ p) z};. I5 U5 d" J+ g2 K1 Y
! B8 q0 H- r6 p5 c& t2 i
static struct gpio_led da850_evm_tl_leds[] = {4 o0 K y/ N2 b: H$ r
{/ J9 R) f, `$ U4 }/ \
.active_low = 0,
4 {) X3 T, N0 o9 z .gpio = DA850_USER_LED0,
( U+ O1 ~# d. r .name = "user_led0",3 Z' T3 u/ A+ ]3 U
.default_trigger = "default-on",- S* r" ^( H! l" ^! v9 P- i
},
8 |$ I1 c R1 ~. v9 A' M% W { q! ?0 j; I$ k( N
.active_low = 0,& j$ J+ c7 J- ~( e
.gpio = DA850_USER_LED1,+ o5 e2 n$ p8 a
.name = "user_led1",1 n1 r& X8 |% M+ r. C% A8 V; |
.default_trigger = "default-on",
& a. X( V9 W/ ^* q },! H( J3 {' e; J8 q* t: D
{' Q' w4 x2 H; d1 }' O, p# n
.active_low = 0,! S+ n* j# ~1 _/ w' z
.gpio = DA850_USER_LED2,
8 z. C, x+ {1 I; W- _ .name = "user_led2",
6 _: |% s- |" ^1 N( j; y# \ .default_trigger = "default-on",4 a5 @, g9 F3 _/ V0 j& h9 Y
},
9 L0 s- `9 k1 m9 _1 E {7 F* X) p0 e, @5 ]
.active_low = 0,' s6 n9 m/ n+ b, U
.gpio = DA850_USER_LED3,
: L- T7 T9 N Q .name = "user_led3",
1 Z# a0 e) k% W4 x .default_trigger = "default-on",
; D2 ^3 g4 N: p& } },
0 S* X% W! Y# n" s- Z5 M) g};
& X+ `! w ]+ W+ Z1 D
. c& E# n6 ?+ Y; m+ W" u5 H5 H9 Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! W; q& K7 u6 E. g4 C# |0 a .leds = da850_evm_tl_leds,
! c+ I# T0 F" t8 j3 V: A" v" ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: w. E4 I2 p: @9 P};
- B1 x, V( N% _7 e+ F
! L }/ x1 [3 x1 [/ t; Gstatic void led_dev_release(struct device *dev)8 |0 E l0 a5 O1 H
{
$ s! g& l! J" g- N) N+ T- o};% I1 v) Z9 ` Q# ]) g
+ p- q3 D! o. |0 d+ ]6 m( z
static struct platform_device da850_evm_tl_leds_device = {2 Q! t' M( Y4 X. |" a H4 j7 @
.name = "leds-gpio",6 u6 O# S: ` v" T
.id = 1,
+ v T! q' _- h4 w9 X' y0 h' S/ p .dev = {, d1 \) L5 j, W% B* B9 {1 w1 s/ P
.platform_data = &da850_evm_tl_leds_pdata,$ D9 T6 e2 _0 _1 J( S& Y0 G* ]! G
.release = led_dev_release,
* }2 W. s q: m; K$ `$ ~ }& Y, h4 G6 A [/ h2 D
};
, T' P0 }0 F$ B0 P9 {/ T
$ H/ B) w1 B( \( N- Bstatic int __init led_platform_init(void)
* B) }- P9 [8 Z8 N7 J* B$ a{2 V0 V4 w$ E, | W3 N& O( R
int ret;
" u0 y' a6 \/ P#if 0
$ E+ L0 i7 b. {6 A) k; r ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 [0 F, J- @) ?
if (ret)# I" M0 p$ m( v
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
A0 l: k5 }1 f/ { "%d\n", ret);
# Y* C$ c9 Y4 {8 ]) }! V- [#endif5 m, L: Z. S4 j+ M# s
ret = platform_device_register(&da850_evm_tl_leds_device);1 Z8 S6 Z1 q8 j$ q
if (ret)6 y1 p4 W4 m6 I% o
pr_warning("Could not register som GPIO expander LEDS");6 G0 [. N: E6 l0 G$ v! V
else# ?; a: j4 g9 Q" t1 y
printk(KERN_INFO "LED register sucessful!\n");( j2 n) k3 y h+ W* ^1 e
) ~6 V7 [/ i# P9 [: ~% M: u1 s* ~3 `
return ret;
: ~) x% `% _- D/ W+ ~$ l& p}
1 w3 e# e- ~" F" p6 `. j+ ~& [ u' W
' Z$ o+ o$ x7 @3 V3 sstatic void __exit led_platform_exit(void)
$ q) v9 Q% S6 W, H$ B{
. ]7 q/ @3 H4 Z0 H' O8 X1 i platform_device_unregister(&da850_evm_tl_leds_device); o# O, P* }0 ^* q
% i, \' ?/ r0 v* g7 C printk(KERN_INFO "LED unregister!\n");
3 I2 ~, w3 {) s# ^}- i) J. K. e' A* L; f
2 O T: o; b2 U0 x9 _module_init(led_platform_init);
% }* }% T9 j& a0 U- smodule_exit(led_platform_exit);
9 e, q% L* k+ J7 f8 T! o: i/ e' X; O+ f
MODULE_DESCRIPTION("Led platform driver");
& `9 l/ g, f: C$ Y, h& U" U7 aMODULE_AUTHOR("Tronlong");
/ R* m3 U% B! DMODULE_LICENSE("GPL");
_4 Z3 u+ r/ c# ^& \' j& R0 E; R$ m5 M; `/ E+ U3 {
|
|