|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ F r7 J& U0 q* y; |: M, ~+ Q8 G
#include <linux/init.h>
$ J. A2 I+ C* W, S& _% y; D ?#include <linux/module.h>
8 u, Q5 |0 W x5 J. U F#include <linux/kernel.h>& h( j/ }0 ~" c/ T" _
#include <linux/types.h>
/ J+ S4 j% I4 _$ e* R#include <linux/gpio.h>. d1 `0 s, |. h- L2 [; z; I/ d
#include <linux/leds.h>3 ]: p% ?' o' N& L5 e% J
#include <linux/platform_device.h>
! E: H' V2 c% I6 R0 z/ s' ?5 {
' W4 ~/ s( F$ i8 W; N F#include <asm/mach-types.h>
8 S# _% X+ `8 i- T, l6 c#include <asm/mach/arch.h>
5 F7 n1 f4 W6 f6 K' G k3 C- g. d& g#include <mach/da8xx.h>
# {) b+ n7 U) i# Z q% `+ [#include <mach/mux.h>
h6 p( M( m& r5 R
6 J4 z5 b# h' w6 ^8 r8 S1 L9 S#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' G- ~( M4 a) h/ j$ \#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): G( P4 ^7 K' T+ s( C3 L
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; p9 ~. s0 V% }# s* u7 [9 Y1 p* o: }+ ~#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ Y6 F, K% M ?
; G" j* W- L! F/* assign the tl som board LED-GPIOs*/
z# N& h i l/ S0 ~# x( Pstatic const short da850_evm_tl_user_led_pins[] = {
5 E) X3 h" ?3 n$ r, @2 u: d [ /* These pins are definition at <mach/mux.h> file */
# ]; D: p, j1 s3 D DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 z% N& a, u( E& O, l* }: p -1
) F( y4 R+ j* h};
6 v4 G1 D' T' g+ S9 ^* ^
$ R4 k+ T& |' O. k1 e; ]static struct gpio_led da850_evm_tl_leds[] = {
) t2 ?, e. `: K6 L {( L$ c# A. E2 x) g; q
.active_low = 0,6 p" P& v% A& O
.gpio = DA850_USER_LED0,( g, @, M' ^2 K. [4 g) p
.name = "user_led0",
# z' C) ]3 l( @0 P7 P .default_trigger = "default-on",- _( c4 `9 U9 Z" D8 P! l
},
9 u' f$ W; e' k { u2 b9 `7 r' v) ~4 F
.active_low = 0,
# i' g( m6 {, f% | .gpio = DA850_USER_LED1,
7 y5 o4 g, m; M$ }% v6 Y( \ .name = "user_led1",4 z$ D) u) \; f* d
.default_trigger = "default-on",
3 c. W3 a& {# @, r3 \ },
% s* O2 y0 t. ?4 M4 w+ g {& A0 F8 P" E% G4 F4 j+ D3 y
.active_low = 0,
0 Z" s7 I3 n$ X1 m+ F$ \# K: r+ l .gpio = DA850_USER_LED2,/ v& F7 Q1 r, r& \4 C0 B! s8 s
.name = "user_led2",0 h1 h' v& f& ^! m& I
.default_trigger = "default-on",* O) b3 y. ?3 F, j8 F# v. M
},
6 J, F# b' a# f& [ {4 N Z* S n8 p7 m, |
.active_low = 0,
; w7 \5 \0 B v, R; q' K+ f .gpio = DA850_USER_LED3,
& [! J [0 R! t8 A' W- G% h0 o .name = "user_led3",
' m- w* q6 o+ @: `7 f/ } .default_trigger = "default-on",
( p- P# D' n! n5 ?0 x& E- e },
+ i) K( U2 o$ b6 v" e7 e0 {};
: q. f7 n! y3 {* z5 b7 y
& }, x A( [% \; K `; i$ Rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: {8 E$ O$ \$ l' r7 M .leds = da850_evm_tl_leds,% X, Z0 U) S1 v( i( O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. ^! F ]; X0 u" w4 M/ d
};- }" X" ]: S! z: x: x; D7 g+ f) K6 ]
9 m" S6 D1 s9 cstatic void led_dev_release(struct device *dev). ]1 c: z- h3 y0 {9 Z2 A F3 H
{
" t: {, N- h! c+ f};4 x/ B# L; j, v2 @0 M0 ~7 ?
8 q8 x" U/ I* d% G6 S
static struct platform_device da850_evm_tl_leds_device = {
! D# W1 {% X* X- S6 I& a# m2 I .name = "leds-gpio"," X" I2 V* [$ m% ?# ^
.id = 1,: N6 n1 n* X; J a) ?9 U
.dev = {; N+ ]9 i: B" I3 x& O0 R* y- C
.platform_data = &da850_evm_tl_leds_pdata,
' u7 w% Y' z$ T .release = led_dev_release,
' b% T" \+ H0 M4 O/ Q }
7 ~+ [* R0 G! ]: a" s4 I};
; h) Z: u8 t) D& M1 r
2 a, c: ]* M9 t/ q% |+ Y1 tstatic int __init led_platform_init(void)
0 M* x9 W) Z& v( S9 Y% [+ h{
8 d$ o% O9 Y& g# g. d9 A, M int ret;
$ V! E- P- h+ G#if 0
2 Q( _7 s# o0 P# e+ h ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ o/ a3 w: X8 F! O! f if (ret)
0 C* V q ~8 d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ W( Q6 o: g: Y5 P "%d\n", ret);
% u! W' \/ J. R5 e, c6 h#endif6 _6 S) S& {- n% v/ R1 L
ret = platform_device_register(&da850_evm_tl_leds_device);
$ N5 T( k, {4 Z2 e if (ret)
7 i# e. u' Q8 C* r! O1 B# ~" x pr_warning("Could not register som GPIO expander LEDS");
# V/ T) D; o7 e else
- d& b' t" u* d3 S5 ^ printk(KERN_INFO "LED register sucessful!\n");
' i9 @$ \/ b) v& ^/ c
9 C# X v) I3 i' K0 p m return ret;
( ?/ g8 p! M9 c- |/ X$ A}
- W/ B! m% [: I- n. F- o- Q2 o0 m6 o9 k6 E" u. K& n3 [/ O$ t4 E4 c% O9 i& |
static void __exit led_platform_exit(void)
/ U. B4 l9 ?7 a2 d( E{1 o7 j$ Y# [ M
platform_device_unregister(&da850_evm_tl_leds_device);
u( f r- M3 H# p. S! Q& h/ W
) w3 E( O9 q& m; c3 z( o6 g6 G5 e printk(KERN_INFO "LED unregister!\n");
1 y0 `& u! Y1 f2 c0 q2 F}
/ c/ d0 D* c7 ?/ o
* o8 n/ W2 p7 z* q1 Cmodule_init(led_platform_init);
# g$ Z1 o4 g2 K+ }' f+ |module_exit(led_platform_exit);
* A# j% X9 }$ B6 B( V5 A+ z; f4 Q
MODULE_DESCRIPTION("Led platform driver");6 ]: \' Y6 `) R l6 L
MODULE_AUTHOR("Tronlong");( _7 b+ @3 A. l* m
MODULE_LICENSE("GPL"); q% _8 x" R+ q0 t$ ]$ n
6 E$ [2 {3 C' ^ X6 o5 H
|
|