|
求大神给下面的程序做注解,请稍详细些,谢谢。
, J( N+ x$ L ]5 d3 N3 a#include <linux/init.h>& W* _: k2 ~$ ^7 x+ Z7 U
#include <linux/module.h>7 Y2 s6 y9 z, ?5 t( t) L$ o
#include <linux/kernel.h> G+ L+ z# L* d. v
#include <linux/types.h>; K4 [% |2 ^ E6 V7 F# A& ^1 c' W5 E; |
#include <linux/gpio.h>" r. z9 |! F/ R" Q$ g
#include <linux/leds.h>
- d d# \$ d& p1 c7 F#include <linux/platform_device.h>
$ f3 M- V* M' H* R: `' M3 O7 J
9 F; p" U( K0 H6 J1 X3 `( I#include <asm/mach-types.h>
z4 V+ f5 G" x" {8 E& Y% t#include <asm/mach/arch.h>
' F1 P0 J3 [9 ]6 [6 g9 X#include <mach/da8xx.h>
4 P" y. m7 F$ F: W3 i7 x+ W$ B#include <mach/mux.h>
; \; ~8 `. p3 o! S
8 u2 d5 [; U* H# t+ ~" m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- X" Z( e1 u- U- K. F' @#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 E. Y) L! c5 I8 g2 s2 ^9 t: K
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 k2 Q( |# X- m6 M. O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( g6 q* c% Q- Q, Y. b9 M" S0 i) H c _- k
/* assign the tl som board LED-GPIOs*/
5 t6 b) t$ c4 k: R3 ^ ustatic const short da850_evm_tl_user_led_pins[] = {9 r# X$ O B/ Z" z! n2 S
/* These pins are definition at <mach/mux.h> file */
4 v) ?, N0 w, x0 a* f* B/ v DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 l( I* f! M. M0 @
-1' W& V6 Q8 M- I, I! E
};7 A- K* H5 C. p1 F% X2 K$ @
( |4 V9 {7 r J8 R0 fstatic struct gpio_led da850_evm_tl_leds[] = {
9 c: V% }2 V2 _+ y {' Q9 s" c# X6 D
.active_low = 0,
1 L( B& `9 a/ N" f .gpio = DA850_USER_LED0,
$ @. I" q& { b .name = "user_led0",8 {8 j/ @: L R2 L5 c
.default_trigger = "default-on",$ G4 f! T4 i+ E2 v( {0 K
},
( e0 F* }* g- J {
& }$ X# G8 D+ e0 x3 R .active_low = 0,
+ q6 T4 y) l5 {& G2 Z( ]) f' D .gpio = DA850_USER_LED1,
. N4 H# T2 Q. H' u" V- k0 ^ .name = "user_led1",
! s) y2 D1 Y6 M* Y. S .default_trigger = "default-on",
/ D& Y+ e1 h4 y4 A },( D, ?& R1 t7 f/ Y0 O$ K2 c" L
{
, s; l3 W- f* s* M .active_low = 0,7 N" D; N% E1 { B3 L' P
.gpio = DA850_USER_LED2,
% M' A+ X C1 [% R! r9 q6 X .name = "user_led2",
1 u4 r# V" T/ z$ V( S4 z! \; N .default_trigger = "default-on",( S# B& F3 s4 F) U
},) C; L& f. k; C$ o4 l
{, Y `. T2 N" J& z. X; l# F
.active_low = 0,
; T G3 @ [ M .gpio = DA850_USER_LED3,! ~ j4 E9 `2 B& U
.name = "user_led3",. @* b0 ?$ i+ J
.default_trigger = "default-on",
6 F8 g8 U( l: e$ M9 Y' C },* L6 C! K& _2 ^ Z+ V! }
};+ V$ A x+ M# N6 P# Z2 e( z8 S
$ x6 Y {8 z4 b" R/ T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" i. Y" U+ A8 T( O# ]4 k
.leds = da850_evm_tl_leds,
: W' x% w& y; a! m .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# ~: `, } @) L# _+ F' p};
# L, l3 i; [* E5 `1 {6 {. P% n; o2 r3 o3 I
static void led_dev_release(struct device *dev)
3 Q4 y3 V7 E" R/ A: i3 ^0 o/ p' m{. `9 w1 y& s; p5 @# f1 [+ J: e6 `
};6 C' R4 c7 @+ f$ `9 Y3 n0 {
2 i% ~: b- k! P& E8 hstatic struct platform_device da850_evm_tl_leds_device = {
% y" }* ~% _% K. }8 ~* }$ Y .name = "leds-gpio",
' S9 M$ ~$ J' z .id = 1,
+ E2 V% u$ z; c% y% O+ e/ P) d | .dev = {+ M( ^) n, v5 b% `# O' H) D
.platform_data = &da850_evm_tl_leds_pdata,
6 T$ g! J* x/ _- p0 l5 N! A/ X .release = led_dev_release,* e3 z% ~ \. `8 A# I4 u) @$ R# c
}
6 f0 {7 Q- j$ \( Z};( X% E3 [+ O5 N( v9 h* ]7 y
( l& t- c8 c4 q( m$ ~/ H; t9 {* m& bstatic int __init led_platform_init(void)2 E( Q- L6 M2 h" f' K! m5 h
{
5 {5 q( L* g2 f6 V. i( M0 K. C int ret;
$ R6 _0 \! B* Y: v4 p8 @#if 08 R% N5 ~9 d! e# W
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& w7 t# I7 T+ l/ ]$ y. y
if (ret), G: x* Q* [* X$ N8 k! }
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# U+ q% E& S. r! `* U0 J "%d\n", ret);
1 V2 f, }! O+ ]9 S#endif d6 U9 f: b* Q! f' B
ret = platform_device_register(&da850_evm_tl_leds_device);
- v' y% V; X+ D5 J/ W if (ret)
, e) ~- v) I/ z; E m" l% z/ r pr_warning("Could not register som GPIO expander LEDS");
2 ^6 i* T3 s* P i" p+ U else7 S' @: s% `- F
printk(KERN_INFO "LED register sucessful!\n");
: L1 C0 h8 I$ e+ Q4 l& x% D1 f) l: }; @& _
return ret;
; ^9 W' @9 J: J2 v: u}+ B6 P9 C* m+ d* j" m8 a7 Z! l1 I
- f* u. ^; M% R5 t! estatic void __exit led_platform_exit(void)+ }& d" w4 F) c2 U) q5 p
{" |/ A- K) `/ j# V' F
platform_device_unregister(&da850_evm_tl_leds_device);/ Z- W& g- p5 q5 n7 T! r6 `
% U/ R* ^5 W# _/ w printk(KERN_INFO "LED unregister!\n");
! j+ a7 j5 ]( |, k}
' w I- P; a$ N5 O' B( H
( p- [! ~3 S/ a' q" }module_init(led_platform_init);
L. ]. D( _; |3 cmodule_exit(led_platform_exit);
. h. M# z; J3 i4 x$ I9 R1 Q$ H: m% C/ r1 O: c. m4 B
MODULE_DESCRIPTION("Led platform driver");
; |% G# c J/ n0 V; @' kMODULE_AUTHOR("Tronlong");
4 W7 ]$ v, V- I4 C. B7 R8 F- j' LMODULE_LICENSE("GPL");* D* m" v2 B+ A: |1 ]8 |6 ?
. m% Z) ? b8 V
|
|