|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; @' _# G$ M. ?* q' h& W0 h#include <linux/init.h>: D$ H& w' l' p7 Y
#include <linux/module.h>
* o7 H) ], y/ ]+ \4 U#include <linux/kernel.h>9 z/ ~0 M" X2 P' [, V! t
#include <linux/types.h>" H( X# u7 @7 ~4 j
#include <linux/gpio.h>8 _% U/ ]2 L( `* [
#include <linux/leds.h>7 Q( x5 m, }- [( F2 ~
#include <linux/platform_device.h>; g2 Q, L. n, \( Q
8 N& @$ M& Q( p# _* E8 n! N+ w/ B5 J#include <asm/mach-types.h>
( i4 ^) B; N, F#include <asm/mach/arch.h>0 R9 f) K0 `, [, G# R# }
#include <mach/da8xx.h>
& z: {2 u3 Y+ @1 }! p+ ]) z#include <mach/mux.h>
1 ~5 M' ~+ j1 @- o' T0 v8 q' V# F
4 k3 B9 y5 h1 c; a9 x- ^#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' k& A5 |) h5 ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) _( X- p! J* |2 A3 S
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) p- C+ {; e- k: v: t9 @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 T( o# H7 o( P. b1 a/ P
6 v! n! `. f% k
/* assign the tl som board LED-GPIOs*/
& e' Y* X, W) D" z. C3 Gstatic const short da850_evm_tl_user_led_pins[] = {
, P7 S R7 X) e4 L/ K /* These pins are definition at <mach/mux.h> file */: G2 h1 f( ^; X5 h# w! F, A# `6 }" g) p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( a$ G" E3 K9 r* e! s, ~9 k2 K -1 `( W {; E$ u, w' \
};
/ E9 @; N* b4 D. b5 C' i0 k1 m9 x1 M; U) f# {
static struct gpio_led da850_evm_tl_leds[] = {! _6 G4 N+ U, @ `5 M
{1 N' j! t$ h) r. z8 t2 D
.active_low = 0,% Z6 Y" C* v# G6 @3 o' [
.gpio = DA850_USER_LED0,# C) e6 W6 Q% h [1 L5 Y
.name = "user_led0",- {! L& q4 B6 H
.default_trigger = "default-on",8 R4 k& M+ z( L8 f
},1 F; A# p1 F( S) X9 h& W8 J
{
" K6 m. N, [3 ^ .active_low = 0,1 G; J0 @: U; c
.gpio = DA850_USER_LED1,
0 R* i* K' L% ^( V' A% W# w5 z; {: h .name = "user_led1",
5 a' ]( q# \ k .default_trigger = "default-on",
* a; Z; {* W& \9 t9 R7 u/ U },$ E7 ]# s1 a7 l) ^; R* y" @* a4 @
{
* t1 P9 n5 t& E, |5 L( e* b .active_low = 0,
9 O5 f0 T7 s+ v' L. I .gpio = DA850_USER_LED2,' K, j5 \/ D( ^, Q6 I5 B
.name = "user_led2",# s( Y! C" S7 {- M
.default_trigger = "default-on",
' [$ r' i; P2 ]; C) W },
) K0 O. N! p+ k d3 G/ z. o {% m3 v4 u0 s8 ]; w7 }8 w
.active_low = 0,
q9 E" r" k% z4 j .gpio = DA850_USER_LED3,7 p/ \1 J1 V) {+ p- y5 v
.name = "user_led3",
' z2 Q/ ^) B: m% H$ } .default_trigger = "default-on",9 I) g) U0 ]! l$ I) x' e
},; X1 }' A5 {2 O& X U
};0 h% e* G! u |/ V! r
- M/ k, ?7 G3 D; W; y# l
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 Q( y, Q4 ] M+ }) q; J
.leds = da850_evm_tl_leds,! X+ M5 \- T+ Z1 {1 y% j y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 x+ V! H/ Y- f% A& y2 p& ?% `};
- ~ V7 {! @, D
* z8 D! K' Y; t/ w( y" ]' Ystatic void led_dev_release(struct device *dev)
; H6 W/ ^& @; q {, V! G( n{
/ J+ _; W1 [2 K};% r2 c/ q% }% J. D
' Y" k: m! ` v2 H& gstatic struct platform_device da850_evm_tl_leds_device = {' o( ~/ ~! W( h0 e' y- q: c3 n
.name = "leds-gpio",
& ~, l9 ^) u. z* I( q .id = 1,
* p2 S* o" T% H .dev = {# B- I' C0 n, I
.platform_data = &da850_evm_tl_leds_pdata,
l+ T3 z2 i; s .release = led_dev_release,
`' s- F: M% y, z }0 {3 _3 m u5 [4 K+ `& j% r
};
/ U% O# _: t, O
2 N$ ~0 g& r* p2 D9 z6 Q" P3 Estatic int __init led_platform_init(void); M5 W' f: G) f0 F, W6 w. u
{
) h2 o3 E. T3 r b7 v int ret;5 A# b9 x0 ~9 S; q. q4 L* y; q1 b
#if 0! H2 V/ ~7 Z: V4 F) t+ d& Y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: r, [3 u! F+ b/ S$ S7 n+ v- j; k7 G if (ret)
8 V; g5 Z! ~. r! N1 ~2 n9 q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% T2 {) Q3 X1 z7 G" N, z a0 O "%d\n", ret);% e' w# b/ a+ s$ Z6 g) H, X0 V" P
#endif1 g4 u$ j1 e+ X$ w/ O. l% i
ret = platform_device_register(&da850_evm_tl_leds_device);
8 I/ @/ x6 T0 @ if (ret)5 Y; w% t7 y8 D1 l
pr_warning("Could not register som GPIO expander LEDS");
5 a3 k& a2 G$ a: @ else
( a' E4 u# ~3 \* d printk(KERN_INFO "LED register sucessful!\n");! C! `- H! A: ]8 J- r' b6 \
1 m+ R* [7 _/ L* ]* D5 Q7 z' R. o
return ret;# k5 g: |9 o1 I- I; |4 ?" w
}$ @; P% p3 M7 W9 }- P
% `! D; R' a" H& X/ E
static void __exit led_platform_exit(void)/ k1 f7 J- ?8 A, _
{
, J% I, R5 a, f# J9 y$ Z platform_device_unregister(&da850_evm_tl_leds_device);
( \" w5 M% Y7 i2 O* I$ T K6 y5 c
printk(KERN_INFO "LED unregister!\n");
8 j7 d! \4 c' o/ V}
2 a. ]1 n$ q' S$ l
5 \4 d: g( C+ ?" m/ ?' M4 g) Umodule_init(led_platform_init);
( o" o" k C7 Zmodule_exit(led_platform_exit);. Q3 z3 e3 m% |: e
8 a: S9 ~) u8 _# p$ ?' t( ~MODULE_DESCRIPTION("Led platform driver");
/ }* f0 W+ u' P/ M) tMODULE_AUTHOR("Tronlong");5 X$ l! Z. v# J
MODULE_LICENSE("GPL");9 Q U. e$ a' `5 m# r5 P+ F
/ [" s4 l: I6 x- k H k |
|