|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: }1 Y; o3 P) I2 L: P#include <linux/init.h>
0 b9 c( |6 g* f" U#include <linux/module.h>
m0 h7 ] S" K* p#include <linux/kernel.h>
2 V }- G1 [7 ~! X& v n4 h% d#include <linux/types.h>. L; b0 p5 O: D* r
#include <linux/gpio.h>
7 I' a Z3 s& w& s. Y#include <linux/leds.h>0 Y6 T7 e5 f8 r# r& ?
#include <linux/platform_device.h>) @& x/ ~* E0 ^
6 r' T' q) [# W" T; T. T
#include <asm/mach-types.h>
0 W9 I& r, N0 G, e- a# X' T* {#include <asm/mach/arch.h>
* n5 R7 q2 o( x* A) [0 V- [#include <mach/da8xx.h>
- r& j! |3 @" u( j, O2 d#include <mach/mux.h>& P: v) y* f) O2 W" h6 Y6 i
2 @6 A% {2 [7 k) L* S#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 I7 R: w4 l) g0 E#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 H3 E: I; w" [% i5 R! ~! c7 S
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): @- H% c$ {" D* `7 k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 E5 T4 i5 n- j9 g& R9 j2 w' S% ~ L/ @7 m' w+ {/ _0 U4 [
/* assign the tl som board LED-GPIOs*/
2 h& P7 k0 r8 bstatic const short da850_evm_tl_user_led_pins[] = {; L6 j7 E9 C# b8 Y1 ^7 O
/* These pins are definition at <mach/mux.h> file */, S T( c# p) [7 |: p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; w6 v$ q. [' g9 y" r1 \ -1
8 |) F i7 ^9 w};4 a* ` Z, Z* \, p; ]3 H, j" L
: B5 g3 v5 V8 H$ m8 \* ]3 Y
static struct gpio_led da850_evm_tl_leds[] = {
( {9 W: l3 H" j5 p {4 w& C" O5 e2 q4 x' d% c
.active_low = 0,
4 [' O. z" |( ^' n$ u .gpio = DA850_USER_LED0,' x! _1 B& Q$ s$ E& ]) \$ Y
.name = "user_led0",
8 M7 F4 K% [* B' }' n" N .default_trigger = "default-on",) |! y4 O& T* [: W$ T
},
& _& \$ n) d# ]+ v6 k, l {0 f; ?% L) _( B7 D- u# ]9 {
.active_low = 0,3 Q8 z5 Z. C7 {0 {+ S, S
.gpio = DA850_USER_LED1,
0 v1 T% w: S( f* ~4 d6 I .name = "user_led1",
. N8 B+ I s2 V, E0 U0 g1 V .default_trigger = "default-on",
6 B* d K/ ]+ D- @. ?0 Q, a },. `# M4 p7 F" U2 |1 A* X
{8 x" C1 e6 h4 @- \
.active_low = 0,7 X, Y$ Y& e1 }. U+ x
.gpio = DA850_USER_LED2,
/ K E v6 p4 Z* T+ p$ i% G .name = "user_led2",7 `. X7 _5 C7 J+ j: r: q% n) [! f: G
.default_trigger = "default-on",1 F7 G2 j' }$ A
},
% k* o- P2 L5 u! M U% E0 n { `; w& M' R0 s2 E6 {9 D
.active_low = 0,
1 ~7 v. y) e) \3 `/ I8 n .gpio = DA850_USER_LED3,
$ O% z/ X4 R* u: ~. v: K .name = "user_led3",7 S: n8 [4 A' X! s7 A& H6 l) L
.default_trigger = "default-on",, {7 E; t" {4 y
},
8 T4 _8 Z2 S8 f9 b};8 ~/ u* q& c' |* t1 H7 {
( n. o O: f6 Y* w: C: rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
`' e# d8 Q# n5 n4 ?* `* Z& Y .leds = da850_evm_tl_leds,& f6 z' W+ G4 G& |
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* }& @- {/ [, t" L: P& c/ [9 M};
5 A8 R$ [( f0 ~
# J' T O m' B7 D/ b/ a& v' P- v1 }static void led_dev_release(struct device *dev)
' O0 p8 d* \" Y2 E{ u/ D0 Y- p( O9 E- H6 m, r
};$ ?) O+ a1 v/ m3 d; F! n ~9 ?
3 T7 X/ a* A6 c, ?6 c9 Qstatic struct platform_device da850_evm_tl_leds_device = {
. a8 x3 D+ b( x9 w r' n) S$ T .name = "leds-gpio",
! C, I' t) p0 j/ d .id = 1,
* D# B$ R( I: d+ S( A: u .dev = {; H9 _* A+ V& q' P9 r
.platform_data = &da850_evm_tl_leds_pdata,/ g2 q& }1 k. p+ D; R: W' E2 O
.release = led_dev_release,) q# p C7 I: M, G( M% h1 |
}8 \7 ~! K/ N# t' Q0 J
};8 i$ _- w; G+ v9 O; j& W. u: O
' o O& s7 {3 ~# y9 ?! D5 t
static int __init led_platform_init(void)
d7 A, g% ^5 v{0 I0 |% S: J# s1 e6 C I2 ?
int ret;
7 p* O$ D' Q a2 m0 `#if 0
$ V' H: ` \% G) h ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 l) ~: _- r0 r( b
if (ret)
* p1 |, K8 ?3 V+ s pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: k2 z/ j, m, B4 @) t "%d\n", ret);6 \# F( W: R2 Y. t9 C1 T2 x3 X
#endif, `8 `" u+ m( @
ret = platform_device_register(&da850_evm_tl_leds_device);& A* b/ M e( b. _
if (ret)' X0 y" t0 ^, z
pr_warning("Could not register som GPIO expander LEDS");
+ k/ P! s' d8 o else) M/ Q3 t. F) x7 E4 @) b
printk(KERN_INFO "LED register sucessful!\n");
& |8 d# X. J. s+ U+ t3 d- [- |/ k; B: @
return ret;
: q7 v8 E+ |$ ]- s( Y$ V- t}' p$ Y: F; ^% Q% D+ k
! i0 @2 r& }, X! S
static void __exit led_platform_exit(void)
3 X% j D, D V' |, d{
; s* ^3 j4 n# H; e platform_device_unregister(&da850_evm_tl_leds_device);+ W% i8 M6 U5 M2 s- i6 u4 v
- I/ ]( m5 k/ |8 A m1 g
printk(KERN_INFO "LED unregister!\n");/ n c4 Z6 a7 u) D3 r$ o
}3 X( t! r# K! {: W! ?( G5 Q7 `- k
5 T. U) |# n/ ?9 p
module_init(led_platform_init);7 S" M. U" m1 @9 T ]8 X t$ V- w$ I
module_exit(led_platform_exit);) ~ f% J3 _. \5 s3 Z
$ L1 O, h* s+ q1 PMODULE_DESCRIPTION("Led platform driver");
- C, R o- `; X( B, XMODULE_AUTHOR("Tronlong");
% u9 T+ ` ^' W' Q4 Q( H4 z' eMODULE_LICENSE("GPL");
, C0 `3 T; j" S3 ~7 w6 Y( i. L4 W, a! I# f/ b' }. R
|
|