|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" v) D- L0 v! e; f7 O$ b
#include <linux/init.h>& V5 K% X# {4 F: u
#include <linux/module.h>1 |* o" i1 \2 ]; |8 j4 P1 x6 R
#include <linux/kernel.h>
, C5 T. a$ ~. n) Q- I#include <linux/types.h>! h- Q1 p: f; p
#include <linux/gpio.h>
, ]. k: r; C; D#include <linux/leds.h>0 ?. I3 u1 _8 M% @
#include <linux/platform_device.h>
% S a. n8 G1 Q; O, k
1 d+ ^4 W; x% @# U! i8 ]- \7 `#include <asm/mach-types.h> h6 @; O, ]# L1 v8 ^
#include <asm/mach/arch.h>
0 I/ m, \) m& G, V2 v- k#include <mach/da8xx.h>7 h" z/ k1 {' o9 r, b& { T
#include <mach/mux.h>
8 }, Q) r8 b$ M% ?. M3 O* L, T! q* S& x6 e: R' G
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ C( d% b9 r& T) p
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) b2 X2 q" B) ?6 ?$ P+ z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) H& L' \# a; ?! L5 g$ a
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 t% v2 L; ?2 R; r$ ?
/ |8 F* M B+ d/* assign the tl som board LED-GPIOs*/
- T0 h# D G u2 x/ o6 gstatic const short da850_evm_tl_user_led_pins[] = {
) Q" ~, p5 g* c/ j /* These pins are definition at <mach/mux.h> file */
' b) j( [: p6 g1 {1 s+ S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
r4 U0 i9 k) O- b: e2 i -1
+ x+ G5 _3 F* L9 g* s};& x2 S# M# Y' Q
7 v3 c. r+ Q# ?! ~5 {
static struct gpio_led da850_evm_tl_leds[] = {1 A, J, F8 J! o+ [3 Y. ^0 S
{
, i& S4 G6 l' e$ z7 H5 W .active_low = 0,6 }: c( a2 T8 ~
.gpio = DA850_USER_LED0,/ e1 `5 ]6 H# o7 B
.name = "user_led0",
9 e1 E. B- _6 U' c0 y6 x( B .default_trigger = "default-on",. V& j6 u5 D" R8 c
},
/ N' o8 z& Q8 P+ t/ p- m {) p; t8 x' \# ?1 @7 l
.active_low = 0,
) _5 x& d; h1 n7 i% J/ G .gpio = DA850_USER_LED1,2 F" k" l$ q2 E9 m% l2 m8 J
.name = "user_led1",( @4 B8 n# b! B
.default_trigger = "default-on",$ w: V6 Z2 ?; }/ C; C
},
9 G$ ?- a4 S, A5 _7 J {
* O* s. P0 J- H! N( d! C4 [ .active_low = 0,
5 v/ L* d7 G( ~ J% |& N7 D .gpio = DA850_USER_LED2,
: t$ t m, h6 A7 E* x, T .name = "user_led2",
z7 S$ N6 |; @8 |( h .default_trigger = "default-on",
9 H, r5 X* X7 g( e- k6 A },
- [& T$ l: V2 F, k {
0 X O% F# T% p1 f* s .active_low = 0,! v, k3 i& ?# {! Y& a! K7 [
.gpio = DA850_USER_LED3,% y+ n C9 H7 T# F& ~( m. r
.name = "user_led3",
2 M# ?6 n4 ]$ c .default_trigger = "default-on",5 A0 a/ M. n, c
},
) Z1 z& g- k6 E' w; _};
! u$ l' E! b' f+ v* q* V0 J8 J/ `
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 w: [" l( i! N .leds = da850_evm_tl_leds,
, P4 i" A# C: D) K, b .num_leds = ARRAY_SIZE(da850_evm_tl_leds),% n1 K5 w7 F% I4 {
};
' r0 c, G6 t! u! y4 J" Q) l$ {& d" D
static void led_dev_release(struct device *dev)5 b/ D" x' A1 M) E, f2 s5 T
{
2 `: F" |8 d% V$ h) n$ R b};
5 M0 G4 e a- W' o, H% U
* I1 P1 @5 F& c' ^4 C3 {static struct platform_device da850_evm_tl_leds_device = {
1 \6 j ^" |) a& J, ~ .name = "leds-gpio",; p, h1 r8 @0 ]' b% Q7 C! w
.id = 1,
2 J( _, [: E/ ~ .dev = {1 M5 k9 c ]% h n5 c
.platform_data = &da850_evm_tl_leds_pdata,, N: d: Y7 N+ j' ~
.release = led_dev_release,
9 c- E5 r2 [: S( V }
/ @: {* h; C+ ^8 |4 h; `};$ e" \% B3 w6 s, o% |
: j" U' c" I5 A9 N8 r
static int __init led_platform_init(void), _. s, u6 `7 i+ H: \6 Y( @4 R, r
{, R( i; U6 K8 K: S* ]2 t
int ret;
% D" m: `. f6 A8 `, t#if 0
3 s& A+ f5 f; {5 O5 Z% l" m9 M' { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! ]9 y7 s) f/ [
if (ret)
" l" e7 H3 s' W; y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; A1 C4 [1 F% N6 E ?) M "%d\n", ret);" U3 S1 {. F4 r3 J
#endif
8 A+ Y) z; j3 ` ret = platform_device_register(&da850_evm_tl_leds_device);
& S a/ S. c* N0 h* G7 g6 c" h if (ret)
- v$ N/ v3 U1 [6 r pr_warning("Could not register som GPIO expander LEDS");
4 j/ ], r* N4 T& r7 S else
/ f0 R9 ~4 m8 E6 R printk(KERN_INFO "LED register sucessful!\n");. U2 ~! |: N1 |0 R* r. ?6 L
: [- N- e6 n/ X return ret;1 o3 G& L+ c k `
}. ]/ x' C7 t5 ?& C w9 m! c
" ^; K# t6 j% _ V: R
static void __exit led_platform_exit(void)
# m% q$ Y3 L( N{
* P! P5 M* g. @ i! L9 I! d platform_device_unregister(&da850_evm_tl_leds_device);0 Z. D3 b& u5 `1 u" G( C1 b
9 I1 C; @1 v r4 `7 o7 Z printk(KERN_INFO "LED unregister!\n");
1 i* p6 }/ G7 x+ c; B}
! K5 {# W: M9 T& c% m& E& q3 | E2 y; \- o1 w# E, F
module_init(led_platform_init);
1 P& ~" l6 `( w$ y5 Nmodule_exit(led_platform_exit);3 l- g& J+ n: ?
' m+ U0 K. O s7 h, j' x& I$ {2 |MODULE_DESCRIPTION("Led platform driver");
" w0 v; ^. V" M E. K; \MODULE_AUTHOR("Tronlong");/ O4 d! q& F# }+ p
MODULE_LICENSE("GPL");
/ {% h% G- `9 R* t, p/ N4 @) T/ |# {% U# v
|
|