|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ j' F1 h+ d! Y
#include <linux/init.h># [; q) r$ l9 w8 c0 Q
#include <linux/module.h># F% u7 s. B6 h% [
#include <linux/kernel.h>7 h, v# _3 h; B6 |
#include <linux/types.h>
) i5 x$ T9 k+ n3 k#include <linux/gpio.h>
: Y ], w5 B$ [; ^' F#include <linux/leds.h>
8 y, d8 r1 r9 G3 C; [2 a. [#include <linux/platform_device.h>/ S! X, m- H7 `- j
% K4 N* l$ D! E7 I: Y) L: ?
#include <asm/mach-types.h>
. K6 L, C; G. X. s$ H' F#include <asm/mach/arch.h>
) s0 r' A6 Z& [3 j7 r% a#include <mach/da8xx.h> C N, B9 }5 n# \
#include <mach/mux.h>
! A) D' @- R" K3 M( n
) `# d' Z' r, p& P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 J8 R3 ]5 e# m' Z+ p( e3 V; S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 n- l/ {4 U$ t$ }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 \0 K ^! ^, f' o3 _9 z X, B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. B7 U! v: _2 b( z! d
, d; d# p6 U* x/ M( f% _/* assign the tl som board LED-GPIOs*/
: _9 O- E( y& e5 e2 O3 hstatic const short da850_evm_tl_user_led_pins[] = {
# `% u4 D( x7 e3 p /* These pins are definition at <mach/mux.h> file */
" ^( V+ W- [- P# R7 ` DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 ~& |$ h: s, n3 F) j -1
, R2 x+ _8 e3 {6 T5 U$ W};
5 Y- \( q6 v" M) ^
8 X# l, v6 i0 g: p$ Qstatic struct gpio_led da850_evm_tl_leds[] = {# M7 I' F( ` @+ e
{
; W7 F# \ f% c: v+ } .active_low = 0,
) m1 e% i4 C# C8 Q .gpio = DA850_USER_LED0,5 f# o. ^8 a' N% x! W: N
.name = "user_led0",
6 R$ a3 b0 m" n4 w .default_trigger = "default-on",6 k+ `% i2 ^0 m1 R" P& Q: I# K
},
: C0 X! n! o+ \' f3 @* |& L; v9 g {% F, J6 `2 Z- ?
.active_low = 0,
; h7 ], J7 p. b$ y! M .gpio = DA850_USER_LED1,
7 w. p# n2 B- F. `! I6 r/ j- M .name = "user_led1",$ v4 p& W9 ]9 h/ ~. X
.default_trigger = "default-on",. i: `% k! Q6 B& V' E
},7 n5 d6 t) H) O E" p* Z7 u, j/ _- ^
{
! A+ E/ L0 }- W4 b9 N .active_low = 0,
* b0 c! ^3 |, p5 _* r1 } .gpio = DA850_USER_LED2,
( i8 v4 B$ h9 C- s% i N& U .name = "user_led2",* u8 q- Q% x2 |/ p+ i, a
.default_trigger = "default-on",* Z: l! D. f9 I2 a2 }: @
},
* ^* i9 ~8 G3 _2 e" ~ {8 L; a2 J7 v9 }! h7 \( \7 g! M8 j* N) }
.active_low = 0,
& S3 b$ L( |$ @2 `9 k .gpio = DA850_USER_LED3,' T: ]4 Z1 D8 C8 y) t- g- m! l
.name = "user_led3",
! B3 \; b/ `% w8 K: R. b2 o .default_trigger = "default-on",7 |6 h3 c6 P- F- v6 E. {0 i3 s
},( ]2 r/ j1 s, U0 ?6 J2 |
};
+ E5 @! T% I: _$ |. O2 m0 e6 I$ \
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# m1 z2 H) R# Q
.leds = da850_evm_tl_leds,
, A8 U7 K9 j& M* |, W& s .num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 A) K' h# }6 M- z
};3 X2 e8 D, R$ E( n7 Q
6 A0 M) g% c+ c b9 m
static void led_dev_release(struct device *dev)6 [# B0 s% M- }+ I( u5 L
{: k( [8 M: j5 t8 [( m
};
1 ]- J6 \3 y5 [; e# D) I) o: | c$ X! H2 F; {2 n
static struct platform_device da850_evm_tl_leds_device = {
. m/ C+ |9 v; X8 s* D .name = "leds-gpio",
+ M0 p- L3 | X .id = 1,1 a# T6 Q) m; d) S0 B. E7 o1 a
.dev = {: ]! D/ p: I! K
.platform_data = &da850_evm_tl_leds_pdata,
; D, ]! z: S2 G5 u! h$ ]; \+ T .release = led_dev_release,
8 \, {, F1 J3 \8 n! L }
' F0 i; l3 n5 q7 h; N0 M};
% q3 I/ i8 V" L' W! [* l# ^* Y, l8 g/ G, F' B. {
static int __init led_platform_init(void); O8 J/ p) M% g& R3 O
{1 d/ R# |8 s+ W2 p( w
int ret;
& n# g, s( Y3 [0 V1 e. S2 Q2 d#if 0 q* Z) g0 B* w
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: k3 [+ G$ g& q X if (ret)% H4 M6 C$ J4 |1 F! s2 I
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' o' h) D! r x. m- c0 Q
"%d\n", ret);
. l- F! E" c' ^+ @7 q#endif9 o% r! P% A9 ^' g/ W. \/ R
ret = platform_device_register(&da850_evm_tl_leds_device);$ y. ]0 L; L; h {! K
if (ret)
( V: |* b8 q+ N+ q, {' {: k pr_warning("Could not register som GPIO expander LEDS");
+ U# `) w! i. u- U else$ F: q. U3 R1 v, W
printk(KERN_INFO "LED register sucessful!\n");5 G7 P. H2 Q2 x4 W6 L/ e7 D+ R, |
) C; `8 ?0 k" D8 L" ?! z return ret;9 P7 A* \/ A [
}* [4 Y( `: P6 i, b& {
- N) U' c. C+ q: D# Nstatic void __exit led_platform_exit(void); r! |- u( R% t, \
{
. @. y/ ^; |7 V$ R( e$ S# `; ? platform_device_unregister(&da850_evm_tl_leds_device);- n7 |& C1 `6 Y: w7 }
" `% a! Q8 b$ N) Y6 \% p0 W* \ printk(KERN_INFO "LED unregister!\n");0 s' U7 ^ I2 r6 |
}
% q/ }3 e/ u9 Z' z. Z5 k' b9 ]$ L4 L! Z3 g1 _
module_init(led_platform_init);! k8 l2 r4 {: Y: ?( a' x; l9 N: K
module_exit(led_platform_exit);8 z5 B( k0 o f: T
" g% P( u& ^2 H- L
MODULE_DESCRIPTION("Led platform driver");
8 U! @ M3 [ {( V+ o1 }2 w2 ?1 sMODULE_AUTHOR("Tronlong");6 C# u" X$ R Y+ X% W- [5 k
MODULE_LICENSE("GPL");! m6 u+ _: W$ [* t: F! I& [
~/ g: s( F" W" |( ]7 O* Y2 l
|
|