|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% [3 @; C* v" _! W3 x$ F& o
#include <linux/init.h>
; i- K6 r+ b9 h' n0 O) o#include <linux/module.h>. e. K* p/ t2 Q! v* r
#include <linux/kernel.h>
& x: z' m5 k3 M/ }1 C# w#include <linux/types.h>
/ X3 ]9 \( I) b; C( Q! {) d#include <linux/gpio.h>" k( w5 n6 a( w; ?5 \
#include <linux/leds.h>+ |" d' J! H8 L8 o
#include <linux/platform_device.h>
3 z- W" z2 t9 v' z6 ?% i8 b: N% y
. E% C* a; _4 z( Q7 m; ?$ f. z#include <asm/mach-types.h>
E! t6 b9 \, l8 X6 j8 o& k; N#include <asm/mach/arch.h>
" l' @7 ?/ e4 i' i% q2 \$ F#include <mach/da8xx.h>
$ X" T& N- _5 {& X, m& P2 z. {#include <mach/mux.h>/ j9 ?0 ^" _& L6 U
1 u3 ^4 F. }. a, X) A4 W- Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& y5 ~: i/ a& \
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 f. b+ n' e! @2 {8 ~5 @, y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! M' ^7 r, T& c+ C( y/ ]/ V3 p9 @, b# ^#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! j: ^4 n. H3 V( q4 |5 o% ?* E5 C# u# _3 N5 n
/* assign the tl som board LED-GPIOs*/
& ]0 l6 D6 X7 q! G4 u2 @5 n5 ?; Jstatic const short da850_evm_tl_user_led_pins[] = {
5 K) Q4 V2 z# }2 {& k /* These pins are definition at <mach/mux.h> file */
* P' H4 q$ v' [+ s/ { DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ O3 P+ m. r4 ^. j) ]& K! O% j -1
. i/ E! q$ h f};, g: R8 E* u3 R: K
5 ]% {# W. W7 s5 ?static struct gpio_led da850_evm_tl_leds[] = {6 M% o3 G0 K. {
{
]7 U. `+ f. L* M4 e .active_low = 0, O3 ], m9 T( |4 u2 s f2 K
.gpio = DA850_USER_LED0,
6 p8 _( i) @! C7 f+ I# n+ d+ N8 L6 W# R .name = "user_led0",
0 m$ }" W5 g n* ~' I4 M .default_trigger = "default-on",' ]- M. b9 w8 i
},
: C* L8 T: ^1 u8 _7 } B5 e {, c& b* q" x/ K7 } G [
.active_low = 0,4 `, ^7 p. k. q) O3 R$ ~% M; l$ V
.gpio = DA850_USER_LED1,( o' _ L, @, Q
.name = "user_led1",: `; Y+ @, R/ s1 ~ e$ E
.default_trigger = "default-on",# k- N& [6 k+ y8 Z* q% A8 e
},- V7 E& [1 u1 H* M
{5 g- S/ ?! n" q- a" w
.active_low = 0,5 V7 @3 b1 C$ u
.gpio = DA850_USER_LED2,3 j1 d* s2 l" b* r
.name = "user_led2",8 T5 U8 z) I+ ` x9 Y' t# B
.default_trigger = "default-on",$ n6 P$ q! c5 F
},7 [7 H- q7 |, x4 n
{
- ?& ~1 v+ t9 A( L6 T/ k" I; ]! ]+ C .active_low = 0,# I& ^+ b9 R3 H
.gpio = DA850_USER_LED3,- b5 ^$ m, d: d4 a9 Z, H1 J# `9 z6 m
.name = "user_led3",5 W1 u" S# B2 M$ z
.default_trigger = "default-on",3 h& r. M: C7 T/ R4 D$ P
}," S- E$ {* r7 u
};# Z* b6 s# k! k1 A! X" z
- l7 L, o6 k% F. O. x0 b$ qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 l( W; H- u3 ^+ s .leds = da850_evm_tl_leds,9 x! g. p {. y- M; A
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 u) x$ m' t# I `2 Q/ U$ m6 @$ o};3 U; V* C% g. U- W: |4 {0 ]
% K q, u+ P, ]0 a7 c& |$ \static void led_dev_release(struct device *dev). T- K$ X! C3 b4 U7 M7 J
{
! ^0 z1 w8 p. P/ e* N+ @* n};# F- o/ x4 L5 _% E o
2 O( }$ k6 Q5 I0 I% x5 m
static struct platform_device da850_evm_tl_leds_device = {
% M' B+ g1 f! b, E { .name = "leds-gpio",
1 p" \& C" p: ]/ E8 W K# T .id = 1,
0 F6 e; s2 B/ L1 c0 ` .dev = {0 M. S- i! L' r* p+ M- B
.platform_data = &da850_evm_tl_leds_pdata,
9 g' q8 u& d/ t4 C6 w .release = led_dev_release,$ {3 H, X* \. R% m
}
0 \' C5 @3 o3 k0 }0 h};8 l3 j7 {' O+ R/ J
8 Z o: U4 j) G2 q% O8 wstatic int __init led_platform_init(void)
" g3 J5 X9 j. V% O7 q{8 u5 N* |9 K: v& m" s$ d( w
int ret;
4 Q9 s5 @+ R5 \1 U3 `/ ]% C#if 0
: n, B% F$ J% V" q' M/ e) m: L! O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ Z4 s/ s1 z ^; D0 i5 w2 u if (ret)- y( \" F8 x0 ?2 ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- F3 d( k& }: C "%d\n", ret);# @; ]" X! G# T' s
#endif, ?: T: {2 Z* e* h% C
ret = platform_device_register(&da850_evm_tl_leds_device);$ [# @9 @" ?; T$ E6 b! r
if (ret) u! K% ^: M: z/ m$ S1 z
pr_warning("Could not register som GPIO expander LEDS");
' B2 e0 ?7 `0 k/ }; @4 } else
6 O0 @+ w9 A1 Y printk(KERN_INFO "LED register sucessful!\n");. S0 G# {2 I+ `: B% p U
3 ]/ u, T, V& ?- G |; f7 w' ?
return ret;
" d# _1 y6 ~2 r2 s( a' _}* r. L0 M# N, m5 m
. u2 z* [& M9 ~! @4 ?2 qstatic void __exit led_platform_exit(void)# L( ~# ]# q6 H* Z) k3 a U# {
{
! [$ ]$ ~8 r- n4 ^3 O7 ~# } platform_device_unregister(&da850_evm_tl_leds_device);
$ b3 N& p- E" z8 q$ Y
8 C/ j6 m5 G& U- `6 O printk(KERN_INFO "LED unregister!\n");. _+ m( F8 ]" e7 A4 P" [0 A
}
1 J* M" Z2 j# L3 D
$ P) r! m/ ~ H7 fmodule_init(led_platform_init);
! @( {+ X& a% F2 @0 L \module_exit(led_platform_exit);
( `* e! ~ z! b- k) t" [# Z5 P% {; A
7 n) a! G1 }+ `- JMODULE_DESCRIPTION("Led platform driver");
# P4 c2 n, v' L* QMODULE_AUTHOR("Tronlong");$ d" V# e! T% z, @& m4 N+ H: ^8 t
MODULE_LICENSE("GPL");
% `; X+ i4 z) {2 k0 x+ F8 D9 u6 F) f1 U
|
|