|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& {* W8 f. i4 f% b8 B+ n* M#include <linux/init.h>
0 f% r% W7 H. V5 j1 W- Q% R$ ?#include <linux/module.h>
7 m3 g' y6 ]7 w+ F1 a# s$ z" [5 T5 l#include <linux/kernel.h>" H1 a/ ]; j5 | {6 q* k
#include <linux/types.h>
% ]: Z% M5 X( z9 W) R#include <linux/gpio.h>
( D- P" X- u% t4 V) S" E1 w2 v1 \#include <linux/leds.h>
: v4 y* _2 D u% U: }$ T: W#include <linux/platform_device.h>( U |$ v$ e9 s. b2 D
Z5 F x' N: d4 ~
#include <asm/mach-types.h># R M! j3 p' w$ ~# L g% f
#include <asm/mach/arch.h>3 {* f( O ^. f! @6 h8 m# h
#include <mach/da8xx.h>9 a# N6 |. w: K! ?, G# ?
#include <mach/mux.h>+ c4 G/ S. Q1 `
7 y, J' ~# j v7 |' d. d" G$ S
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 @5 }! ]* q) j' \& A3 o#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* A5 l- A& F: _/ h! |5 v5 D- g#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 I% B$ Z& i) P8 G( u+ L( P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; ?6 L8 x; k& P2 b3 o
8 a. B" z/ p, h- R u# T/* assign the tl som board LED-GPIOs*/
3 w( [1 K( O h. O, ~static const short da850_evm_tl_user_led_pins[] = {
9 V! n8 W5 H! I /* These pins are definition at <mach/mux.h> file */
- L9 b3 U% X1 c s7 x. j DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. a+ J! @* o$ ]1 W
-15 k0 h" E ]) m9 g' S6 s
};/ E! T! @5 H8 C/ o
. i9 Z) c+ A# v k u
static struct gpio_led da850_evm_tl_leds[] = {6 G8 M& F% [+ V4 d: m# G+ D9 g
{
6 C6 [3 k; | k& j) z7 }* k; g, s6 w .active_low = 0,
2 B+ T/ a: d5 M, s& [ .gpio = DA850_USER_LED0," C0 t! t% s) y7 H- B/ H+ `, ^
.name = "user_led0",
1 e& P% n5 j B' P! K U .default_trigger = "default-on",
2 ~3 O4 c4 s+ b8 O },
4 W3 x* {$ s& D3 H {; K, \8 f9 V2 W3 z$ k5 t
.active_low = 0,
! G" y9 X7 h* m0 C1 l .gpio = DA850_USER_LED1,
8 L9 [* T% k0 M5 P1 u .name = "user_led1",
9 e2 R5 H& q# P .default_trigger = "default-on",
3 `5 l/ Y! Y& J; Q. h3 m },
/ B! T( h) z% O) k+ ?3 z6 p {2 ?, W. [! X* t+ p. o3 p$ ]
.active_low = 0,
: l% \( C6 O$ r5 w; j$ L0 n .gpio = DA850_USER_LED2,
$ E8 m# O; {+ u5 a5 z .name = "user_led2",& E/ v: P: z6 P
.default_trigger = "default-on"," O; N, C2 \ u/ a+ m5 O
},
% L# }. {9 E1 y" |+ V: q* ` {+ u$ P( ]; e u/ Q. ^
.active_low = 0,
6 w1 f3 i) ] ^& a; U4 m9 ] .gpio = DA850_USER_LED3,( R( T& ^% k1 k7 b+ a- ^/ r2 Y
.name = "user_led3",
6 _5 ~' W9 A/ u- d .default_trigger = "default-on",
7 N9 j1 q, q& \7 p! x },
9 g0 r" w& M5 l/ i};
) t2 N3 J, |" v7 S- \3 ^0 H# ]$ N( O) T$ e0 q! O% D9 x/ V: C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 P! h Z% r2 @# z) e .leds = da850_evm_tl_leds,
2 _% V: t) ]' [5 J& {- E .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! @; p* ~0 S6 W4 v" h};! }- ?4 X9 i" v& f+ E; h
+ W1 d m3 W7 Ystatic void led_dev_release(struct device *dev)
4 g$ L- M& n/ }) ^* v5 l# ~{& ^6 G7 M9 c/ y8 z) Y$ U2 R
};
. W# `2 ?5 K+ @- a! B; M- E1 f5 O1 l# ^
static struct platform_device da850_evm_tl_leds_device = { ^8 t, j: S8 e/ v" D1 v T
.name = "leds-gpio",# F% Y5 F8 R* B
.id = 1,
& C( }7 F6 k2 d, i H0 z .dev = {+ A! K( P! d8 z
.platform_data = &da850_evm_tl_leds_pdata,
9 L& s; B$ k! |- X& Q .release = led_dev_release,7 N% H m+ E4 E% r' t2 E4 J
}
9 [! O' _9 K; U- A6 `};
% o2 W1 E3 Q; X* g n# H, C$ o4 s* G$ Z
static int __init led_platform_init(void)+ c& `8 x8 L0 p }% {, d( T* e
{
5 n+ N; C% R3 B5 s int ret;
2 J8 u8 c! C$ M; z#if 0
* R1 d) ~$ }: t* M$ g+ C7 W ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 W3 n3 n9 x5 B) Y7 P
if (ret)+ f4 H: H( i5 n8 o5 q% _3 [
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) u9 d* V9 V- r+ S- t' H "%d\n", ret);
, P% D, {+ e% s0 P: r1 d#endif
+ J0 t6 ?$ w8 b0 V+ O ret = platform_device_register(&da850_evm_tl_leds_device);
X: H+ A1 p( _ l- N( l/ s if (ret)& j1 B4 J+ H4 u6 N' v) Z: P& Z
pr_warning("Could not register som GPIO expander LEDS");
' B2 m+ g7 ^# Z* L else
( a N8 i; Z+ s& n3 x& l printk(KERN_INFO "LED register sucessful!\n");
: M1 i' c' {5 c8 c6 F
[6 ?$ u: W( l8 Y) _& w: v return ret;
( ~4 V8 J+ v; y) g: z}& k' C5 Y; C3 ]& o; ~- }& u9 M" Y
* R0 c7 [# N) m+ f1 d0 Tstatic void __exit led_platform_exit(void)$ V* g+ V! A5 }% K+ E O
{0 u8 d: g0 t/ c5 W* }* z
platform_device_unregister(&da850_evm_tl_leds_device);2 B! o8 M# T( y2 Z
" G$ C' H) u, f' m6 W, k5 e
printk(KERN_INFO "LED unregister!\n");9 F2 `" e" n2 x0 u# \
}
, L+ \) h8 W0 R& A0 M. C% [5 M! p
; ?0 y' i1 _. B! @' Hmodule_init(led_platform_init);& B4 A2 @ P+ r* _3 X
module_exit(led_platform_exit);! L2 {8 F T5 r# b
( I5 d3 {0 A3 s* i7 N, d$ c% o t" W
MODULE_DESCRIPTION("Led platform driver");& T- R5 @- [6 E6 q% }. ]* ?
MODULE_AUTHOR("Tronlong");
* `, r2 r& M5 n5 L" yMODULE_LICENSE("GPL");
6 V p& i1 W O) `/ R: G+ _& \
5 C% X( h. \9 B% g1 G: { |
|