|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
u2 ]# ]- U, M7 l8 C#include <linux/init.h>
3 G3 }! [+ L D% x+ E2 K#include <linux/module.h>* V; J8 K$ ]/ p( D
#include <linux/kernel.h>: r8 d4 [, T" T" J6 P
#include <linux/types.h>7 r" t- V6 p3 U. `
#include <linux/gpio.h>. ]! c: U/ C6 q3 ` D
#include <linux/leds.h>
* R5 |, c3 F5 P/ X8 s#include <linux/platform_device.h>; [, `* X4 W7 @ m! ]' X* c. G
+ [ {- Y6 t9 ^- W
#include <asm/mach-types.h>
, j& X/ `4 i- q% E4 ~#include <asm/mach/arch.h>- @9 c: P8 i: H% ]% O& B% Z
#include <mach/da8xx.h>" |1 Z( p7 J9 i$ Y. C2 a1 g
#include <mach/mux.h>
7 t+ c8 I z3 }/ @& A$ [, d
$ N/ \& _4 a9 Q$ x#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% _) G" ?( a6 F) R; \# [9 m. w. v#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 ?" z/ |6 G; a; F6 q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; e; d7 e6 s& q3 e4 [#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! O6 T8 V. [1 _+ Z: H+ }# ^8 O
; [( Y6 B# _5 v0 c! P# @/* assign the tl som board LED-GPIOs*/3 y4 E$ v, ]7 P7 g' A! G; i8 i
static const short da850_evm_tl_user_led_pins[] = {
. l, U. A/ o% z+ h% Y /* These pins are definition at <mach/mux.h> file */- e6 f, y4 A$ \$ D0 U( [
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! O2 s% R' x7 }4 a! ?, Q7 y -1
d9 I+ h! `$ L6 J1 E0 e};
3 n0 H' q) d0 _6 x4 f. ~$ b# y' J- i; t6 n5 G4 o
static struct gpio_led da850_evm_tl_leds[] = {# Z7 p7 ?1 |( ^( h" Z4 G# _
{7 I% }& M- x2 H2 L5 ?
.active_low = 0,
! M+ g+ \' j& @; \8 ~ .gpio = DA850_USER_LED0,
8 y8 i; i" q/ k .name = "user_led0",3 S* `& n! w# ~; y/ P
.default_trigger = "default-on",
7 a5 O) B! _& e/ Y. e5 u8 S },
+ K0 q# U4 Z F% c {
2 L g! O/ M4 ` .active_low = 0,% f) f6 [4 o7 @- b
.gpio = DA850_USER_LED1,
1 K5 s: G! F7 r9 J8 A2 B) I .name = "user_led1",2 ]( L$ X4 ^. F& |9 [
.default_trigger = "default-on",
. m2 S) e, d) ~! e7 ?9 h' z },
, d- o! I: J$ J' M& Y3 r% w+ Z {
9 k8 V% R& C) t9 o! _+ l .active_low = 0,$ `6 X" t7 u% P9 \% s( u' _/ ]; L
.gpio = DA850_USER_LED2," |' S) X0 O. x8 F5 T2 g
.name = "user_led2",3 J' j: u4 z$ s7 v
.default_trigger = "default-on",
3 L) d) y* N' |5 c },( K) f7 M/ I! R5 ?; R) @7 c
{
5 V7 }& c3 R; E- Y* a* m) ? .active_low = 0,
/ P* M1 {5 q0 E$ a .gpio = DA850_USER_LED3,4 Q$ ^* g" f0 R
.name = "user_led3",! u* j) T7 Z0 v. H# v
.default_trigger = "default-on",
! Q4 W' N0 |6 L% E; a; v5 ^6 ~3 b },
& n9 g- z& s" Q- l( Z5 f};1 Q7 z- y3 u7 _ T: Z5 w
# J; Q! e- k3 Q% g- q7 S' istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( d' K1 `0 u- Z, ~9 T$ W; z( X
.leds = da850_evm_tl_leds,
% M% C4 Y) F2 m$ v. y; {' D: F) t .num_leds = ARRAY_SIZE(da850_evm_tl_leds), A3 |2 f" `6 |" b( @# W, `) `) q
};
- _* O$ N7 x( D7 a1 h' [, b; J6 Z3 C" O8 L
static void led_dev_release(struct device *dev)
. F% e8 j" N# H! g- }+ k: o{$ v/ R5 x2 S( G' o# B: w" m
};
" p1 y( f8 ]/ Z6 A) d6 v9 D
0 j0 E' d& S2 X- B; `: d% astatic struct platform_device da850_evm_tl_leds_device = {
/ p6 d4 X& F& ] .name = "leds-gpio",* M: ?6 c( J# T8 ?
.id = 1,
0 S( j1 c+ [/ e; h; l .dev = {
% z% t9 i* P: F* o .platform_data = &da850_evm_tl_leds_pdata,: x R# w9 {9 w4 w" W
.release = led_dev_release,$ y$ p* G( ~6 @0 r
}1 u5 A& K& r* Q" B: D8 D6 S
};
* Q7 Q! v1 [3 d. x2 P% p+ e2 z! ]: |9 @- @3 }/ [3 W4 h
static int __init led_platform_init(void)
3 C+ n" h0 m- ~& I1 W" R( N8 E{
* }% t2 W. C0 Z7 `' x int ret;
7 C9 o$ w" F1 S#if 04 O3 H* i! b! L8 q. `* v0 P+ `& D/ n) P& N
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ G) P g$ o5 h) H R0 D. z
if (ret)
! H: P' [8 m% e pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 {# r( K4 }/ r% n/ Q) O
"%d\n", ret);, K5 Y/ {9 I- Q, C+ f/ F( p& O
#endif
* _( X+ `2 u9 L' b. e% q ret = platform_device_register(&da850_evm_tl_leds_device); |3 k, z2 c* d3 a+ Z
if (ret)
: J8 z9 W3 `" \8 N5 j! i pr_warning("Could not register som GPIO expander LEDS");: r# O: K( q1 u l2 ?8 m0 _8 `
else+ W; n: C' M# H0 D7 z6 Z a
printk(KERN_INFO "LED register sucessful!\n");. ?" D/ K. j9 P* h v b! z _
2 V; Z; P1 N6 J
return ret;: J5 k$ F3 K% U/ D' @4 m9 w1 K
}
; X8 i* r# V; W- U* N' t) E1 ^1 p) ^( c' D; h* R9 W: Q! k
static void __exit led_platform_exit(void)% N) ]+ _6 y. N
{1 e2 h5 d$ s: p
platform_device_unregister(&da850_evm_tl_leds_device);0 j& {7 s% K7 K
5 S2 f! U/ [1 E: v7 m. H8 y printk(KERN_INFO "LED unregister!\n");+ r8 I' }* m u3 a& [
}
& c# V0 k! b2 k! C+ u6 _. f6 D; P7 g$ X
module_init(led_platform_init);
" @% }3 k* T% ~module_exit(led_platform_exit);
" E) z4 |0 R# k4 X& ]
! u, v8 g8 m7 [% R) OMODULE_DESCRIPTION("Led platform driver");
- u3 e& ~& K2 _0 d4 T8 QMODULE_AUTHOR("Tronlong");3 X5 f+ n( t0 e2 ?
MODULE_LICENSE("GPL");, {; {1 S! C' `$ _4 T$ m( S0 o
0 `( i t2 h" U2 j( D" A/ L- l
|
|