|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, a% b' Q: i+ z, N1 d0 x' B0 ?#include <linux/init.h>& G7 v) V6 F: u7 b+ C6 p: S2 c4 G
#include <linux/module.h>
% L$ w; I, @7 [/ ]#include <linux/kernel.h>0 q- Q: F0 j/ x6 O; U3 Z$ d
#include <linux/types.h>
7 X) R/ b, ~ a% Z#include <linux/gpio.h>
+ ]9 }- t$ J8 C, g w. X; e) {#include <linux/leds.h>
8 J9 I1 s! \& l#include <linux/platform_device.h>8 v9 h8 M9 K' O0 o; `" K
6 v( I) U3 F8 }1 E* B; N' f, @
#include <asm/mach-types.h>3 s' }4 o; }* Y1 I+ n
#include <asm/mach/arch.h>5 G1 p2 ]5 l# T$ V2 C
#include <mach/da8xx.h>
; \$ r- q5 u0 F8 Z4 J#include <mach/mux.h>
9 Z- u+ @" c- h$ s2 J0 ^) C+ O% f* K) b3 ^6 E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! k7 v1 x, q9 i' X. w
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); C, g- e, g7 f) a
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ Z+ ]! B9 m& \" L' P! ~/ P#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# p: ^# e' w }9 Y! E3 G" y! X& s- i
& R4 e2 f3 a* J: t/ H% ]* w, X/* assign the tl som board LED-GPIOs*/7 k2 D% t* U& R: r$ D
static const short da850_evm_tl_user_led_pins[] = {
/ O0 G7 L& }; W. N. A. T0 T /* These pins are definition at <mach/mux.h> file *// T. v7 L# L9 i1 J/ L
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, U) W% A5 \6 c1 X6 |; X
-15 p! m/ c! `6 z
};* r; Z" c; T, i" |. C: L. o. y
4 H2 G0 ^0 M j9 }2 Z+ @
static struct gpio_led da850_evm_tl_leds[] = {
! J: i3 [4 C% N/ m! ` {- ?6 h- r' ^3 J8 ?0 ~4 {
.active_low = 0,
, r5 k% a6 {9 m7 }. a .gpio = DA850_USER_LED0,
% D$ ?# n9 s, E9 Y .name = "user_led0",0 p* b+ `8 w6 C; b' v+ Z
.default_trigger = "default-on",0 v7 c" ]) K* j5 T4 F
},7 v9 l$ r4 ]* Q# v& U) K
{. i1 q# d. R* j a a% `! }- z
.active_low = 0,
5 M' I" Y, x/ b. u, J .gpio = DA850_USER_LED1,
6 F9 r7 ^* T3 l; z( R# o% r .name = "user_led1",
1 S& ?; D; O% G, @, \ .default_trigger = "default-on",
- W4 y% L' H- O# L3 Z },; |: p/ o/ _9 j
{ g1 R4 ~1 {9 m7 b5 M7 q
.active_low = 0,) f* {* W, n! j8 |% V6 g0 L2 t
.gpio = DA850_USER_LED2,, P0 H* l$ k0 o4 @& k1 y0 H
.name = "user_led2",
k0 a: a/ ]$ E' {5 C3 ` .default_trigger = "default-on",5 Z# ` ?& n2 U' S, S. L, `2 E! x% M
},& ~+ X# M) D" g; C
{4 r4 e! k6 [- `2 g5 ?1 V
.active_low = 0,2 m% P4 [! K! J2 T* n
.gpio = DA850_USER_LED3,* H, o: k( r1 b; H* T! J
.name = "user_led3",
, K2 G2 s3 O6 e3 O3 b: r W .default_trigger = "default-on",6 {0 o) R4 Y0 m( q
},; ?; |; P1 L5 R
};0 ~- f+ N/ L' A. v& Q& o2 i
7 W8 C9 m+ {$ t; \$ M; k; a
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 {9 s' L7 q, x% |: L .leds = da850_evm_tl_leds,
w$ M" ~" I! c, L2 o- y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 U; i# Y0 u8 u4 z" m6 A};
) Q$ {: e" ~8 I' V7 Y* d* f+ j. f! A* w B! u! w
static void led_dev_release(struct device *dev)$ k$ ?4 H+ j g$ d( s1 J
{
* r% t y( w4 U3 I1 |: z: u. x};
# W- @4 I7 c) t X5 [
) l, p$ I8 Q' Q9 X; v( M1 estatic struct platform_device da850_evm_tl_leds_device = {9 k R! |; ^5 S. i- ]) G0 A5 B
.name = "leds-gpio",3 l1 {8 F @+ H2 ?1 P, g) l& `# d. a
.id = 1, H7 w, B$ a9 c5 p+ M) T! ]
.dev = {
1 k& T8 `# q" G3 h3 W .platform_data = &da850_evm_tl_leds_pdata,! }, b- s: x5 p H& x/ o7 a' {
.release = led_dev_release,
7 Q* X& m9 E. @7 P% b% Z4 J/ X }
/ _7 w$ P) H5 F/ `& r) ^1 P+ g. `};* M) i% E* p& F" G3 }+ P* f- a" X
+ O& j! T* T+ E `- @ F( b
static int __init led_platform_init(void)
4 c& _9 o: ?2 v. @; q4 [8 s/ m% m{2 }2 z6 e' D' _" \% L- U( ^
int ret;* h9 j; ?8 g1 M4 Z# I5 g
#if 0
7 L' L* Q7 G3 @6 f, R0 f, A" ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 V1 K. I$ m" H3 A. u" I
if (ret)& |7 B( h. `- Z- S" z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% s& M3 h: O P0 `' J" i "%d\n", ret);! G6 |, j' f) L Y
#endif- G) h( o9 h) S9 |: u
ret = platform_device_register(&da850_evm_tl_leds_device);& p5 A ?% q9 } h% B1 K; L( ?) P& d6 g7 N
if (ret)* I8 D$ p K) v6 a0 o% B
pr_warning("Could not register som GPIO expander LEDS");; z$ _; x& j( T; a
else
4 o: j: g1 ~. z& d printk(KERN_INFO "LED register sucessful!\n");
) f/ O, _/ u# j& |+ f9 n5 l- L/ z8 ~4 N# h C
return ret;
' A# w$ v9 v( l; x& r+ w8 N}
( j- J b: b3 `
0 C5 N0 T% I4 s/ X4 w3 q2 vstatic void __exit led_platform_exit(void)
+ @( h9 L7 ] _{& w( r( [% |, V& o+ f3 o- @) F
platform_device_unregister(&da850_evm_tl_leds_device);" T* m4 I5 {: C0 |- j }9 T
( d5 e' Y6 e d/ b- P
printk(KERN_INFO "LED unregister!\n");7 C M6 X3 z* K) m7 q1 K' E" ]: n
}
5 i, J, ^; W. L+ l5 Z5 m& r. I B- r) h3 k; Z" b
module_init(led_platform_init);
: d. i4 g* N& N; Amodule_exit(led_platform_exit);
0 t" R$ C5 b& \5 `' h ~0 B* _/ [& [* ^$ ]: a3 n
MODULE_DESCRIPTION("Led platform driver");
6 P* @6 |$ `1 T( }MODULE_AUTHOR("Tronlong");
5 n( {$ j3 f1 g1 x4 y& c F% T1 {MODULE_LICENSE("GPL");" V0 ^6 m E, Z6 u# e4 C( i
9 v4 _4 z, {8 R/ N& e |
|