|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( c% B# g% R& ?, Y, r& O2 M#include <linux/init.h>% {; U9 h8 e" {$ o8 r
#include <linux/module.h>
' \+ d: ?0 [! v6 K#include <linux/kernel.h>
5 e0 a0 H8 W3 m1 B5 {) { N#include <linux/types.h> G+ s1 X) T0 ]' g2 t2 y
#include <linux/gpio.h>* d& E8 R" [( F! H$ M
#include <linux/leds.h>8 v4 I- f" S3 [* {
#include <linux/platform_device.h>8 r4 |6 v4 T E7 Q& I7 {& p% f6 u
( K, ?$ N5 ^0 S; c
#include <asm/mach-types.h>
\* l4 H8 Z, g! x5 z#include <asm/mach/arch.h>
( ?: C+ V; F6 m1 H/ [( g2 ^#include <mach/da8xx.h>
+ [1 O- y& a+ _3 ]( f) }#include <mach/mux.h>5 z- {5 \: ~+ D, S9 _
3 I7 S+ W- z p) K) y6 ]; O
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- A! h, e( j* q* k+ w1 H
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ i" @7 b1 w, E: h#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 Q8 I( ^# W. r$ v#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 O7 `1 R0 W l. E7 z1 J, y
, e" w( K+ N9 Y$ r/* assign the tl som board LED-GPIOs*/3 D5 }; B- `& W q* l
static const short da850_evm_tl_user_led_pins[] = {9 u+ z: E, I9 Q# j' K" b. C
/* These pins are definition at <mach/mux.h> file */' `$ I( |0 \+ B% e9 v K# ^
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 K/ U( Z: E" |$ O) Z, g
-1
+ r. z# @" L3 F/ t" l. S1 l};- c+ x. Y7 S* I2 ^2 B0 G
9 @! ^6 w# E; G/ s7 hstatic struct gpio_led da850_evm_tl_leds[] = {+ v/ }+ s. d" c B6 n) r: {
{
3 x6 x9 A1 M" a& J .active_low = 0,! W: J/ a# Y5 G4 X2 Z
.gpio = DA850_USER_LED0,, _6 d6 b8 o5 y% A9 [0 [* [- l5 K
.name = "user_led0",
- b& k5 [/ j2 i4 t0 U1 n" D .default_trigger = "default-on",1 r1 D/ `; F* {5 E
},
7 f" Z! S4 o' u {
# X0 M( t7 e# q3 a! E+ ] .active_low = 0,! \% U* @ ` G/ f# i/ X1 T8 {
.gpio = DA850_USER_LED1," j7 h. y N5 o0 M4 |& ]1 y
.name = "user_led1",
% ^( Z i D% N1 c: | .default_trigger = "default-on",
6 {- M) X6 O- K% S2 M }, O d; o5 r6 |/ l: Z
{
( n+ {: J( M- }, Y% t .active_low = 0,; a* Q* Y% i$ E: f3 E
.gpio = DA850_USER_LED2,+ k6 C4 N. [/ \; }/ Y' d+ D( E6 q
.name = "user_led2",
. X4 O0 q& G$ _ ^1 s% l5 ?2 W, D .default_trigger = "default-on",- f/ |* h0 a. i
},
5 Q2 n1 L6 n& P, ^ {% X" g% n% ^% M# {+ q) `& B& y E
.active_low = 0,
' c( u, y; R1 A: @6 g: X .gpio = DA850_USER_LED3,
; y/ I& m+ }' |! h .name = "user_led3",3 M1 v- D/ M4 X; k7 q N& y6 U/ g/ i
.default_trigger = "default-on",4 `5 Q8 C( O/ W5 u
},
+ z+ j) Y" o1 J" v, u};
% L( @; K2 y+ z7 `4 b5 _! ~3 E# l1 v3 L1 I( Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 s0 b- K5 k% B7 c
.leds = da850_evm_tl_leds,
s7 [7 R, T6 U9 q# C) k R$ w .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# d) S% N* q1 l5 \$ U* i4 ?* N
};' Q4 j& f1 o7 T$ ~& i1 }3 Y
* N7 q |8 @6 _: h+ G* R& o
static void led_dev_release(struct device *dev)
0 _/ i8 d( e, F: L8 S' r% a{
: g; s6 f2 r0 ]};
& J2 ]# G" N1 H7 h& N H
4 _2 Q8 t& V; X' y0 Lstatic struct platform_device da850_evm_tl_leds_device = {
, Y/ _) A/ I* A5 V9 ~4 c1 w* L! u3 g% P .name = "leds-gpio",$ S% }9 ~/ m0 z
.id = 1,
7 r% b( P: m. N# q# P/ _ .dev = {" z2 ^( _/ F0 o+ v& x( h& p2 b
.platform_data = &da850_evm_tl_leds_pdata,5 P( \: j# E2 Q6 h- ?/ l* |6 a% f
.release = led_dev_release,1 j' p, E$ L" _; J% _) Q
}$ e, F/ b4 r6 Q# G5 e5 P) F
};( {" L+ `' N. ~. I7 i1 p! D
5 g+ X, }: P9 l! T* [2 a0 Q2 O' J( h8 `
static int __init led_platform_init(void)
0 M8 M/ r, P8 p& S$ j3 O8 R, K{
3 y# \8 x- ?9 R$ \' `& z# ?* _6 b9 m int ret;
" x6 O8 N6 _0 g$ p( I#if 0* w" `0 j8 w/ w; {
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: p. v# x/ e. G3 Q5 F$ w9 q7 x
if (ret)
" y5 \3 d4 C1 j8 X pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 b/ S1 B8 o" T+ l7 x' E "%d\n", ret);
1 s i8 J0 o- E, K#endif+ c. g. }+ H" V% J
ret = platform_device_register(&da850_evm_tl_leds_device);6 N8 T* x: X2 \& A/ q3 J" `+ g9 n
if (ret); g [' ~+ X7 m. I: l7 v1 Q/ [
pr_warning("Could not register som GPIO expander LEDS");
- N& n1 T" l% O ]( A) `1 z5 M else! E' m) U8 o0 e' y. }6 }4 V. k
printk(KERN_INFO "LED register sucessful!\n");
9 m ]6 V/ ?9 g' Y3 D: i/ a2 Z. `0 [- N) P3 K/ x
return ret;
" H; D! A2 c4 S+ d}, [+ F4 \ o( E5 N$ D6 C5 B
Z7 P1 ^* m% Vstatic void __exit led_platform_exit(void)* c4 A" K8 R% f" H
{# y5 J- U& l: C6 S6 ?$ p% N
platform_device_unregister(&da850_evm_tl_leds_device);* X+ O; W3 Y& Y) `
/ e& j& C" Z; v3 D- _
printk(KERN_INFO "LED unregister!\n");$ \4 ^ f& O3 E, Q0 N! h
}
9 c, `) N! K8 C1 S9 w5 o' C3 d$ r5 U3 U2 T
module_init(led_platform_init);8 ?# u2 t& Q$ }
module_exit(led_platform_exit);
) j8 B* J+ f/ @/ N1 C6 E
6 D7 ]4 F: H- \MODULE_DESCRIPTION("Led platform driver");
Y# B" M8 a! c8 r- g% S6 R) gMODULE_AUTHOR("Tronlong");
6 \+ P$ D! u% G7 LMODULE_LICENSE("GPL");
! m5 z. [8 r# g3 h8 G- x* ^! \) h. u8 b
|
|