|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 F9 u; d# S% }6 L( I1 H#include <linux/init.h>( Y6 M' O4 T, g2 f/ `* J
#include <linux/module.h>* i. F( M9 h7 ^+ m# G' C% r% r; n
#include <linux/kernel.h>7 b0 o$ i3 X) }8 |4 W" p
#include <linux/types.h>' A% I$ `' D5 ^: e' y- Q: k5 b( K9 N
#include <linux/gpio.h>; X7 `2 l* p+ A& p2 x3 J
#include <linux/leds.h>
5 c4 x: ~6 s" @2 [0 ]$ X#include <linux/platform_device.h>
" V0 P5 F, V2 `! N, v3 @9 ~3 M
0 P4 u. V! a# h0 G% V J#include <asm/mach-types.h>
4 i* H9 r- b* e#include <asm/mach/arch.h>
# Z3 [8 @( ~. R' h( S* W1 e* H, J#include <mach/da8xx.h>
" z$ Z8 P0 |) o4 H, |/ }( b#include <mach/mux.h>5 l6 G4 _/ p! A/ E, j6 t
: U" k1 ^) L! C* z1 F1 R* n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 l6 w, w7 H* R( |! \
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% S7 u& Q, F8 D. ?) R8 v0 {& x% p1 p
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 v4 S0 P$ r8 ?6 U; q! l
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): E: ~! f, L7 W8 r
5 E& s5 f# Y6 T6 E
/* assign the tl som board LED-GPIOs*/
+ D1 w% u: `' l( y, Astatic const short da850_evm_tl_user_led_pins[] = {6 N* `- I8 Q9 ~1 Z
/* These pins are definition at <mach/mux.h> file */9 j) n8 i: }$ q% T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, Y' T9 c# h7 g, ^ -1: M7 k8 b+ l. }
};* X8 m7 V! [8 M8 ` q4 e0 f
8 O& r3 m' r7 y1 G' k( K% Estatic struct gpio_led da850_evm_tl_leds[] = {
5 D: M- {3 n+ Y {. ~4 ^" ]2 [4 E) x- d
.active_low = 0,
) @2 V: Q% C; {( Z4 e s; X7 p .gpio = DA850_USER_LED0,! {: k# c' _' h2 q% S6 L
.name = "user_led0",1 g, y" U$ D A/ \
.default_trigger = "default-on",
: ~: U. D- i# S Q5 ] },% c2 Y4 Z. x/ P- |% L4 t
{
% L' Z" X) I. Q8 ^, p! s .active_low = 0,1 q' b% \6 _# E" [# U+ L6 A
.gpio = DA850_USER_LED1,
. d% S7 ^! P$ f; E .name = "user_led1",
, E; T( x9 Y7 S! W1 ^# d8 G# w .default_trigger = "default-on",2 b8 J- s% H8 @ j0 ^
},$ e1 h; I* j) M! \' H7 j9 g$ W6 J
{# L& M) `8 a2 z9 |: _
.active_low = 0,
- `7 A6 P6 p, \% k2 N4 w0 |4 R .gpio = DA850_USER_LED2,4 w6 S+ B C! S! {
.name = "user_led2",: c: O4 v/ V: G
.default_trigger = "default-on",
' n; O% k0 G. i- L },/ ]. \2 w- i* X/ W) B' q
{7 a9 ]% q3 i/ Y, R8 A# v# d% C
.active_low = 0,6 Z3 w2 r! y; x+ _
.gpio = DA850_USER_LED3,) Z) z4 p7 c: L5 B7 F6 `. u# B
.name = "user_led3",
0 O; X4 z# V# }: u7 ~+ f" G) S1 R" ? .default_trigger = "default-on"," F* B4 z% A8 }
},9 j' u) Y+ n% C7 }
};; j1 H: S$ r* y5 N
( S0 u% \0 h& h% u5 o7 B# e* ?" p8 f
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% F# K; r4 s" H9 q p% s: G+ W$ k
.leds = da850_evm_tl_leds,
# {; `- ]) j, ^! ^& O' o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! j9 E) M$ R) L K};* C/ c' ^( G. r1 A- y+ E
- y; f- u! B- h/ [) U" O
static void led_dev_release(struct device *dev)( [5 i8 `8 W( D$ x
{' z( @8 g6 _2 L) [+ L3 {( V* h
};
: F- w# D6 ~7 s9 I% j. {
, ?) B, T( m" R$ Vstatic struct platform_device da850_evm_tl_leds_device = {. R6 S" H- P+ `: E8 r
.name = "leds-gpio",
2 H& J; p3 m- i1 ]; o/ k: l$ F8 _ .id = 1,, J# Q3 q5 r! ^8 [( W
.dev = {+ v2 d+ z: r {+ H
.platform_data = &da850_evm_tl_leds_pdata,! w8 b, o. C( ?" X0 I4 ]+ d( s
.release = led_dev_release,
' t* c/ O5 M. ` }3 k0 h& Z4 E9 P1 A3 r& Q
};9 ?. X7 e: d& U& J9 G
" | x, N5 N% p9 W5 u
static int __init led_platform_init(void)" P; j$ G6 O, T0 E% K+ }
{- z8 r8 _& A+ L8 C5 C; d
int ret;
! R7 \. Z+ q9 ^( b; J; q#if 0
, C2 H6 h* n+ v5 p7 @8 e ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' w/ N, s8 Y! Y" \( F
if (ret)
' k( C% i3 i) r2 [. K2 C# ]& t pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 }9 E) m$ p, J# {( X4 c
"%d\n", ret);- S! w8 t$ s, ^+ K
#endif3 U& D& X) U9 H* d t
ret = platform_device_register(&da850_evm_tl_leds_device);
# |# a4 E, T& s if (ret)
8 ^% x& e/ T- D6 I$ G1 l3 @# ?! M pr_warning("Could not register som GPIO expander LEDS");
$ u) y; V/ h4 v else+ ?- [ X& z. C& r' X
printk(KERN_INFO "LED register sucessful!\n");
; g1 r0 H' {4 }8 x$ Q, H2 O+ z2 @3 L- G7 S4 T2 `. w0 R3 [: N' h% U
return ret;
8 H- y2 K$ ~* r! ]8 m6 [}
& N- u! Q0 u1 t+ o, w: y' b# D$ h' h& ~' h" C x5 q; a0 {* U
static void __exit led_platform_exit(void)
, O4 M& J% ?" }$ N0 l9 p{& Z7 `6 D; N# Q: d, f) Z# I
platform_device_unregister(&da850_evm_tl_leds_device);. m4 U, P2 P) A2 W
3 W O& V7 f; O' R0 {
printk(KERN_INFO "LED unregister!\n");' ^; w% A* a( k4 V
}
1 J3 D) L# P& F; u) e: d6 P" ?, ?2 M! d" j
module_init(led_platform_init);' \4 C- X$ x1 F) ^) q* B" `
module_exit(led_platform_exit);
8 W) i2 V: n' j$ u- t, p$ F+ L. R1 X, Q7 X8 M; v
MODULE_DESCRIPTION("Led platform driver");
# ]. W8 u$ t& QMODULE_AUTHOR("Tronlong");
1 _% ]4 V: r! oMODULE_LICENSE("GPL");
% j& P( _* s' c5 B4 i/ Q' ~! A4 X8 X9 [/ y, `3 K8 \# e* p
|
|