|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 P _! ?/ |% S0 X5 o' \& l" T#include <linux/init.h>1 b; v ]6 z1 V" H: _+ p
#include <linux/module.h>" R# s6 _* }% e
#include <linux/kernel.h>! F8 c# y6 ?. P i# i# s: t
#include <linux/types.h>
/ Z' D) m) s6 B) D$ g0 V& _- J#include <linux/gpio.h>7 u7 u0 ? n! h/ E4 t K
#include <linux/leds.h>9 u3 K, d! N# k. W5 k: e
#include <linux/platform_device.h>. `5 D) ?8 n' K/ P6 }
4 s: g2 _' D% T
#include <asm/mach-types.h>
8 _ l5 ~% V l% u/ {#include <asm/mach/arch.h>% _' ~5 ?, @0 J8 D+ A
#include <mach/da8xx.h>
7 d! U& z! }$ ~! |: B3 |% W' E#include <mach/mux.h>
6 M0 e0 j# _! N7 \
0 O: M7 B8 O5 A: ?+ Y" T. f#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 Y3 q& d9 u( o
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 M ]2 e; B% Z5 j: t
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ e7 \: ~) t# e! S0 |" R9 v% B
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 q3 Z) Z3 J+ Q" S. z
& E) B5 q) |1 A v# E$ @, `* Y- ?
/* assign the tl som board LED-GPIOs*/# M) Z( q, U, N
static const short da850_evm_tl_user_led_pins[] = {9 U$ B+ E8 H, ?" G, o; ?" K
/* These pins are definition at <mach/mux.h> file */
8 |9 N% f! e1 [- V DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 w& o m% r# n7 c/ r; d" u -1
; Q, ~# w, e4 P};5 Z1 \' C+ z# _# M* {- n# J% ]
1 U2 M( E' T# p/ Tstatic struct gpio_led da850_evm_tl_leds[] = {
0 q. z( N" k0 a) H7 s4 [9 a4 u {# `: c0 w+ e9 f4 D2 Z( |
.active_low = 0,
3 D" V5 M9 S* R' g0 c4 ~& E; | .gpio = DA850_USER_LED0,: w4 u* {; N% d, x v' J0 Y
.name = "user_led0",
4 V, Q% K: g M$ {" } .default_trigger = "default-on", j& x# ^0 Y$ c& u; m1 q* G& t7 T
},
- C. A& O; ]" D" R {
8 ?8 y" v5 X4 {- R3 q6 Q& g8 O .active_low = 0,
' X7 v: o4 a. J/ h .gpio = DA850_USER_LED1,
$ l' C3 ]+ x7 r1 M0 p0 k0 G4 T. ^ .name = "user_led1",
2 O8 C K ^; n% Z( G4 @& L .default_trigger = "default-on",
% [, X, u8 P) n% Y, a0 u },7 u9 e. ^3 \ u9 d- q2 F
{
1 k8 V2 U5 N$ I) ] .active_low = 0,: p* l- R' Y1 Z7 Y, L. u* @
.gpio = DA850_USER_LED2,5 Y4 z- l3 @0 }& \8 a
.name = "user_led2",
- a! A) Z# w* x' k! m .default_trigger = "default-on",4 X$ f3 q/ u7 G" x1 u
},/ I3 i+ X q0 i% N9 ~
{: C) j9 @% ?3 X- ?$ ^6 K
.active_low = 0,
* m* |9 N. [% \5 i3 u2 N' _: ` i5 Z .gpio = DA850_USER_LED3,: \+ b& Z e* [/ I! c
.name = "user_led3",
/ n& y, `1 [# u/ `4 ~$ v' K .default_trigger = "default-on",
; v& R8 T7 F0 J },
7 A* I$ |: R& @. f Z% z};
' R1 e/ M( X7 \0 J+ W* T; _
9 I5 n6 o3 l- j0 V$ ^static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! _: q) a/ p; t! t0 v- F& N1 L .leds = da850_evm_tl_leds,
8 b5 t* I; r/ ^ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 p( i" R! t3 e$ {" W};
) z A! [( |7 Z# B7 n ~, I$ m; V4 n) n2 j' G
static void led_dev_release(struct device *dev)
6 d {3 R1 a8 H8 [) }! g: k# r. Z3 _{( w$ S4 J) V2 l* A
};
- r' v2 l" `; {3 l& z. M
- n' [; z' T% T5 Jstatic struct platform_device da850_evm_tl_leds_device = {' K% l; q$ q# @
.name = "leds-gpio",+ i& f: E5 E# S" l( {2 N8 N n
.id = 1,+ l+ ^ X* i$ `1 m
.dev = {7 J- ]/ z1 H5 i5 R! J4 J9 U8 t
.platform_data = &da850_evm_tl_leds_pdata,. @. [. q3 K7 L3 ~2 t
.release = led_dev_release,
" w* H: ?6 ^0 W4 y7 P }0 _0 P/ m: J# Z& n+ }
};8 S; D) p' C7 V$ E+ f8 S. L
$ J9 Z9 s, [' }4 \# j) O0 e
static int __init led_platform_init(void)$ R& T8 U, s) j2 d6 w6 a+ t8 Z, ^
{
l3 f& E( Y V: U( U int ret;
9 O* W5 t2 R8 \2 b#if 0$ c0 L3 z6 Y7 {" J. C2 @ t5 |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- [; b1 Q7 j& B f! U/ V4 o7 c if (ret)# U$ j/ f6 X: [) d/ F! R. s
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* H1 p- G0 U4 M. \, H4 {
"%d\n", ret);9 o$ k! H; p: b, ~7 S
#endif4 w- Y T0 q' n) q0 V- |6 S9 Q
ret = platform_device_register(&da850_evm_tl_leds_device);6 u$ ^7 F' h/ A4 p( o- S; y
if (ret)# j' Z) G( s$ A, O, d; X% g/ U2 `
pr_warning("Could not register som GPIO expander LEDS");
' _0 ]' t' s& Q3 H- V4 o' ? else8 ~2 _8 T, u' Q+ ?
printk(KERN_INFO "LED register sucessful!\n");
* ]( |) g- ]# z# o( O D
, n+ A& x. c2 }, g7 M return ret;1 P% d, {( E \' ^2 }, b
}, w4 q% z8 A% w; g6 b
0 k4 ]7 Y- I0 r9 w0 }( R0 N5 Ustatic void __exit led_platform_exit(void)
S9 b+ ~/ f Q& w{
3 I; t$ {: R/ H6 H& N4 `; C platform_device_unregister(&da850_evm_tl_leds_device);
, X" h, Q; t H6 a/ M' j- ?
! o) U5 I$ S' U R' M( s" ^0 j printk(KERN_INFO "LED unregister!\n");( L) R: ?$ X/ `1 W5 R" W$ E. v" ^
}
2 }* I: h* b+ R+ a. I4 P
, D, p9 }2 I, ~; B0 [* cmodule_init(led_platform_init);
. z3 c, g$ \. ]: q/ R/ Y7 Tmodule_exit(led_platform_exit);/ X2 U# U3 @/ K% p7 f' i9 B
- I5 G& L" ~/ \, GMODULE_DESCRIPTION("Led platform driver");( n; H+ \3 ~; s" F% Y0 p
MODULE_AUTHOR("Tronlong");7 d% ?# ^& |# ~& a0 K! |
MODULE_LICENSE("GPL");
4 \+ w' @/ p% t+ ]- R% X0 s3 ^5 e5 I; g& o' q3 l
|
|