|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 A( `0 ~: t" n, F9 ]
#include <linux/init.h>
* s! c3 W7 J" R. {, y0 F: S#include <linux/module.h>- H* P r3 p1 w( m1 I9 q
#include <linux/kernel.h># ?4 ?2 w- l- g, [$ j8 n0 u
#include <linux/types.h>
% g" @+ |# m1 w3 E( Z#include <linux/gpio.h>+ q5 a' c3 q* m& ~% a! f+ t- @
#include <linux/leds.h># V- T; x, p% C$ c5 X0 p
#include <linux/platform_device.h>
{/ H% Y0 `5 G
. T6 X9 S: l) z; I2 n#include <asm/mach-types.h>* B( h |: R# q: \4 z$ V! |4 B
#include <asm/mach/arch.h>
1 ?' ?* P I' D; `2 @' g- Y#include <mach/da8xx.h>2 r( Z3 ]4 E: K, B0 v' f
#include <mach/mux.h>7 D* r3 S+ z6 I& t7 w
' ]( w$ ?. p' U#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 R8 v% L7 |" z% [% j4 ^
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); g& v7 J: F" [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# L9 g7 p; v* ^2 g: U; \2 [. K#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( e6 b+ M7 b" U/ q5 |
& q; P8 l& Q9 I; r( e" j4 _6 ?
/* assign the tl som board LED-GPIOs*/$ q u& s. W" n; A% x
static const short da850_evm_tl_user_led_pins[] = {
# W6 r# |& Q9 R3 y /* These pins are definition at <mach/mux.h> file */
/ @4 Y! F$ {1 s, b- ~+ Q, M$ I DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% v1 O9 ?( X) H( N6 \0 ? -1( G2 i# l5 ^" H$ O+ z
};
6 Y0 Q5 P# {3 C+ Z" L% s/ m" T: {- |; \ N7 g. |
static struct gpio_led da850_evm_tl_leds[] = { U5 i3 b3 p# c% `! U. S
{
& B& X9 @. F! p( l: } .active_low = 0,- x+ t3 x7 P% @3 Z1 Q4 {" a
.gpio = DA850_USER_LED0,1 V. [' N) |4 L! ^1 a3 M; Q
.name = "user_led0",& ]& m! Z6 ^, O) c/ ^ @7 T5 ?
.default_trigger = "default-on",9 Y" k" M. z3 _" x7 E' u P
},2 j* j1 [9 e) M8 T2 \( ~; Y' X
{
# C" Q+ u" Q$ g; F6 m4 j/ e .active_low = 0,9 w3 }/ q! x7 ^* l% v" \; p
.gpio = DA850_USER_LED1,
0 X6 h' P- D+ A3 o0 b/ F0 X8 o7 R .name = "user_led1",' { |7 s* K: ^" f) Y
.default_trigger = "default-on",# `8 X' L: F/ I/ H' [
},
' J2 w" X. s; a$ @, O; p) \ {
7 r9 l- L2 p+ l- V2 O1 C1 ~ .active_low = 0,0 h) {: z$ ^: n- Q5 b5 V
.gpio = DA850_USER_LED2,, I% T! H, C |9 m7 v) ~4 d2 U
.name = "user_led2",1 i% ? t' ]6 p
.default_trigger = "default-on",7 ]" e& e! _9 d+ j- U' L0 a6 u" R3 @
},
4 u, U( K+ e" K4 X; O8 { {
8 S( i' Z: i( f .active_low = 0,
* m& b$ E, D: Y% k: \ .gpio = DA850_USER_LED3,: e! N# I+ v5 `
.name = "user_led3",. l8 j, D. h- l. V/ i1 w
.default_trigger = "default-on",
& E5 r: P. w4 Z, `( V2 ~ },. D9 \* b/ T! Z& f0 n' h
};. i* }/ E( u0 w+ ?; J' V l* U
+ r |. c( I8 H2 V# x6 L# j2 c. h
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, H# p' a/ Z1 A! Y# E
.leds = da850_evm_tl_leds,0 d6 B* H- f, ?2 V9 ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ F' O) z4 p ^) J' Q};9 a7 Q# v; V) u
$ E3 ?% g4 H, D' p* r# `
static void led_dev_release(struct device *dev)
/ V- L! R* ~+ c7 m! Z; j{' _; l5 M& X" y( j, r! O8 `
};
. c0 W# _) z+ L- u
" |' W U9 ~; k3 i) S& _( F; dstatic struct platform_device da850_evm_tl_leds_device = {
; E" M& q9 ]5 U$ Q' m .name = "leds-gpio",+ ]& G& H; v" |* L C6 _/ D* F
.id = 1,
& m5 n8 a5 {8 P .dev = {
# Q) D( ?) F) q+ Q& H' s .platform_data = &da850_evm_tl_leds_pdata,
# f. M8 a7 o% H# c .release = led_dev_release,
! k1 v4 j2 r1 v5 R+ t: |. F' P0 P }6 E9 b$ p) @/ S! k
};! y' i" ~* H4 k6 A" q8 v2 W
) y6 k. R' A! x7 R" Gstatic int __init led_platform_init(void)
7 Z" k% ]( C3 w+ b{4 u2 n6 L' p1 U9 R
int ret;2 F/ F* v( m! m
#if 07 V i6 j$ ` s& f" C9 u% ^$ b% w. e' y/ h
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
P) s1 p6 _& j+ @$ n# R$ [ if (ret)1 N! s- l1 l) O8 K6 a
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 X* O, s: x! Y/ d& _. {& F
"%d\n", ret);
1 P7 t5 {6 ` J#endif
) _3 I, f9 h8 M9 B% L( G ret = platform_device_register(&da850_evm_tl_leds_device);
- G- U; x5 t/ d8 C- r: \, R5 q2 V5 S if (ret)
( l) `' v+ Y, i0 R4 z3 x' k pr_warning("Could not register som GPIO expander LEDS");* M$ n/ ^: u1 ~8 k0 S
else P7 m8 {+ D G
printk(KERN_INFO "LED register sucessful!\n");1 X" c3 E, j8 S7 a G B
/ V" g, b% | f0 I, U% B' f5 a
return ret;
1 m w y: H: P4 N}1 L0 H) ~% a. j2 [+ ^; V* n% R/ Z3 L
0 t* w) m) Q% ^3 J4 W: \
static void __exit led_platform_exit(void) P. ~1 q; Z$ v. y
{
, \" Y9 S: `2 d, u4 ` platform_device_unregister(&da850_evm_tl_leds_device);2 @( L7 z4 U" a) J( x r" B7 H
) V, u- i/ _- G, j# f! U& H4 z; B printk(KERN_INFO "LED unregister!\n");# T0 g" V- ^. [5 d; h
}+ Z$ v1 I" C' g
4 @9 S9 L% M, A# xmodule_init(led_platform_init);+ A( z) C/ L! o( [2 M$ K
module_exit(led_platform_exit);% f/ d: t& h6 a4 |5 y( k6 |" Z
5 T' k7 X) u2 s( UMODULE_DESCRIPTION("Led platform driver");0 ^9 o4 E. Z+ u% s) R. I
MODULE_AUTHOR("Tronlong");
7 i$ a4 R# h2 X4 mMODULE_LICENSE("GPL");
$ P5 Z* ~; T3 |' D& k s
* \, ~# ?0 m+ E7 w1 p- c; L$ R% s1 t |
|