|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ T h& |$ S/ j5 A; X/ j% q
#include <linux/init.h>* F; s( Q8 i }3 Z8 T
#include <linux/module.h>9 i) w# c6 B/ D" ?0 T" y9 P3 t
#include <linux/kernel.h>5 M; Z* m0 A/ i# R7 z" V
#include <linux/types.h>3 A' G' ]- j0 Y+ O( \
#include <linux/gpio.h>
; ]6 [( y* o, c+ s8 l#include <linux/leds.h>
+ `- E# Q% z2 d8 [5 U5 \#include <linux/platform_device.h>
% {7 Y* w: {% j) c% }6 Y# P9 l3 ]3 |% c
#include <asm/mach-types.h>
3 n8 X7 I7 q7 E" b: h$ q- J#include <asm/mach/arch.h>
, S5 j8 h2 F7 b" F0 d3 V#include <mach/da8xx.h>
; C' ?/ o5 I, g& O) r#include <mach/mux.h>
' c, c k6 H" g) P2 n5 _" H" W7 x, H1 I$ q7 w2 d* h; _& m1 K
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, M3 g, ]7 W# Z& u# S" x#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( k1 e2 M" K( s5 j. K+ d/ A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 S% }# i: l# H; S g: x#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( Y: y6 Z' f+ [* r
8 m/ C4 u' \. w6 l/* assign the tl som board LED-GPIOs*/
) z# {+ p) |9 M( Astatic const short da850_evm_tl_user_led_pins[] = {" z$ i+ r, {3 i* I' F" z, H
/* These pins are definition at <mach/mux.h> file */
/ g- `2 q& b, ~# y# I4 ~0 n5 ] DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, j+ b5 c. l) _
-1! C3 q( b7 z2 T, M0 g0 c
};% s2 Y" z" u) k. e, c) l
/ o' C8 Y2 Y$ ~% c: Q3 astatic struct gpio_led da850_evm_tl_leds[] = {& ^4 }: K) x8 y/ b, l& v
{3 \( G* [, r1 y: i
.active_low = 0,
3 k6 I! p4 \9 ?8 m# m7 P .gpio = DA850_USER_LED0,2 E' I0 |! K( K3 i
.name = "user_led0",, K- U. N, {! M0 m0 X3 @' }% \
.default_trigger = "default-on",) }2 I& n* y. o$ C, P8 }, j
},) e6 K, R* z$ }! t2 C! f
{% O/ X. T, I5 {" G2 K/ m
.active_low = 0,
/ V! w& a4 O. p .gpio = DA850_USER_LED1,& ~) z+ @4 L; I. X; r: ~
.name = "user_led1",
# A5 i0 E, ^9 p( ^% A, b .default_trigger = "default-on",, a% G' M" ~" r& n. I
}, v ?/ z" A" h; Z9 H' `
{/ |* Z' s) X F; d. F
.active_low = 0,
/ c" ?0 k! N8 A# t6 C .gpio = DA850_USER_LED2,7 t7 O" Y. p6 e
.name = "user_led2",
$ L8 d+ p$ b, U% X4 V8 o2 \+ A .default_trigger = "default-on",
; E" M# }5 D$ S' d6 H+ m },
, O {7 Z- ]2 y3 v {
5 o! u2 u, D0 a: }- m .active_low = 0,
5 U! x8 x8 z, r, r9 u& L .gpio = DA850_USER_LED3,
6 I( D) F& a5 Z- h .name = "user_led3",7 [( n7 @" k$ d* a [
.default_trigger = "default-on",
5 ]9 @0 G/ n, f0 j6 q9 D9 ?- f" c },
# t! {. V0 c! Q5 @( @+ N5 J. Z/ W};
9 E, C: M+ H" g& j% V2 [1 V; ?. k. q, `, R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, C7 \2 v9 P- q$ N* { .leds = da850_evm_tl_leds,
" d5 S* s1 y) O3 Y2 g" y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),' G+ U- Z' W5 S* F0 {6 \7 V- j
};5 W. C2 b3 ?+ b+ U. E
3 M. C2 ~" d: Y2 I7 c+ T- ^, cstatic void led_dev_release(struct device *dev)
' r. g3 |; d) w, E W+ m{
1 x. [8 r% H7 j, e. Y* x& q+ g2 h};7 D- w6 b5 W) N( X6 J
8 }5 v5 Y6 F; r0 Pstatic struct platform_device da850_evm_tl_leds_device = {4 F2 E: _4 c* I/ q7 H0 F
.name = "leds-gpio",6 k7 O2 l, V+ t3 [ P1 q8 M
.id = 1,
& Z. t. s+ s) x) M. W: d" F/ r .dev = {
% G# Q3 ^0 l4 { .platform_data = &da850_evm_tl_leds_pdata,2 x2 l: X4 j6 J$ H: D3 V# }1 R
.release = led_dev_release,$ p# `# G8 {, x% T! ^# J
}
0 i3 s* J4 V/ t; D3 y$ _};+ a$ O4 c) B& V" ^$ h, ?
+ J& Z$ A$ P2 |- k; U
static int __init led_platform_init(void)9 z ~ \# P1 Y' y" {" Q2 m
{# t) Q) s2 Q- I# J/ P) b
int ret;
* L9 S! k* R, x( d5 `# |#if 06 `! d8 B5 v6 l6 u* L, h. ?' S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' g# \% w% `% l: Z/ A( Z( M if (ret)' s" f4 ]1 x, m6 s5 o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 t! N0 Q6 n) U8 |1 V' @
"%d\n", ret);! z0 b; U! M" ]& T/ t* c
#endif' h. S6 W, T) D- {2 z3 W
ret = platform_device_register(&da850_evm_tl_leds_device);0 p x% _7 Y6 u6 T( V `
if (ret)
( E& l- ]/ T, ?* W5 A pr_warning("Could not register som GPIO expander LEDS");6 y+ K* N" j e8 e+ n' a
else
" P2 x+ G0 X6 X1 g9 n printk(KERN_INFO "LED register sucessful!\n");
9 x5 c V" g9 r% c: A4 y0 O- Z: f# Q0 B! W
return ret;
4 _9 K; @' A4 I+ e: Q) q# p' d}+ P3 e2 [, b) B5 B: \
* [- ?* C6 N3 x; b' Istatic void __exit led_platform_exit(void)2 ]4 s* l1 l" ^8 [: u
{
/ Q Z+ n0 a' [$ I! s3 X platform_device_unregister(&da850_evm_tl_leds_device);8 {2 R4 w0 E: {8 T$ M8 E
; G+ Z0 C* x6 g5 o1 g8 X$ ~ printk(KERN_INFO "LED unregister!\n");
8 f- K6 u2 F5 P Q$ w" t! u: ~}
" s# F* L$ F+ l) w& X4 r8 |% a; O/ ]7 H4 W! k
module_init(led_platform_init);
( N. o: O. K/ umodule_exit(led_platform_exit);$ N" [/ Z; ~6 R2 P( |$ R
2 G1 ?/ Q) w2 f+ W; s
MODULE_DESCRIPTION("Led platform driver");
" y+ G8 L1 G7 K% k9 }8 ~* j7 @MODULE_AUTHOR("Tronlong");
4 z- ?( \/ v( `3 gMODULE_LICENSE("GPL");6 s$ e* x u _
$ g" K/ B8 a& E& M/ c
|
|