|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 _* v: A `# ^" z, k#include <linux/init.h>1 m1 L9 `& O& R! x- T
#include <linux/module.h>
4 W8 ~; z6 u, t5 K* R. X#include <linux/kernel.h>
- k6 U8 Y9 ?8 \& X) ^( Z#include <linux/types.h>
' E( N, B" e0 O3 h#include <linux/gpio.h>
. B! G2 P D1 D2 t' z#include <linux/leds.h>
; h/ B, x/ p# c+ _; {#include <linux/platform_device.h>
% O" ], i) u& i
, q8 _8 F9 n( _' E3 U( g#include <asm/mach-types.h>
6 I9 I- E% D9 T- q& r#include <asm/mach/arch.h>
9 B" O u, [! q4 c# F- D9 w#include <mach/da8xx.h>
; R) O% ~% F* P7 x ^#include <mach/mux.h>6 z/ [& G( h$ C) M' z' d% U
5 A/ d. Z9 [- m/ M& [* A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) z, _# Z" U) L( g1 k#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 C" D6 t5 ?6 H8 z
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). R+ d3 L6 }0 H" O* S% F. J8 [/ C3 ]
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ Y5 o4 @; C7 j1 Z) \% B$ x( m/ Q ]9 h9 O& R
/* assign the tl som board LED-GPIOs*/) D5 ^4 j4 f! U* G
static const short da850_evm_tl_user_led_pins[] = {3 w0 u9 d9 I7 M* a, `
/* These pins are definition at <mach/mux.h> file */3 R$ }! e5 m% x( A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
^9 M Q. c( b# L' O -1
" Q3 O6 q, V- ~# o5 ? ^- }};
|( o+ y9 g4 Z7 V L' ~
) I& U1 d7 x' g3 u2 l6 _static struct gpio_led da850_evm_tl_leds[] = {
3 \8 f/ f, ?% R! l' x {
7 K5 E& L7 y) r4 I- d .active_low = 0,) ~# N% a1 S8 x2 I9 T
.gpio = DA850_USER_LED0,
. W4 n% z# C5 a) t+ Z, R .name = "user_led0",
9 m0 ^. g, G% |! n* x1 ` H .default_trigger = "default-on",
. y7 ^6 p: L' \ },& g# {/ w* e/ j7 u
{
" W1 Q0 i3 W- k .active_low = 0,8 A4 U ~4 H" M' e( H k* ~ ?
.gpio = DA850_USER_LED1,
- ^9 s) X( R5 e4 n; l# X( I .name = "user_led1",
+ ?( K: n( ^! ]- i9 N .default_trigger = "default-on",
2 ~ E q+ H3 O( F% c$ }' {/ D5 _ },
3 Q; i3 y9 [1 E4 f- E+ M R {2 ~9 Q, o; V1 K2 p7 ~2 @, {
.active_low = 0,8 @6 Z+ A3 d2 i8 U" r# A, H
.gpio = DA850_USER_LED2,
; D1 z' Q) W3 Q .name = "user_led2",5 e$ C. D0 d$ K' S# A
.default_trigger = "default-on",
N% y2 s7 h5 q5 X },
3 }3 j) E6 ^$ Y$ |. I$ L9 j {
! V( l6 J' d7 Z% i, B% X+ t .active_low = 0,( j8 t4 }( N' f3 l
.gpio = DA850_USER_LED3,
8 U5 S% _2 d0 u .name = "user_led3",
! M+ v3 o- n9 y$ J8 U .default_trigger = "default-on",
; f2 V* h+ Q; c7 ?( N3 c, o' A6 j- O },
- Y. H0 ^) ?$ F5 b1 s! v};
& K& k7 g0 `: S4 {6 d+ s5 ?" j. Z% Q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 V8 {4 e0 O- b$ \' Z- t$ c
.leds = da850_evm_tl_leds,
9 q' u7 ~2 w6 ]' j# J$ R .num_leds = ARRAY_SIZE(da850_evm_tl_leds), ~4 Z( w* F& m0 N9 I
};
: ~) W' m; ?+ k3 e7 {; Q$ D7 B: }4 j v$ k: ]# J$ i
static void led_dev_release(struct device *dev)
o! u7 k) V( F5 I9 ]8 i+ _{
6 d9 P0 h1 m' x% n};
; ~7 L" N* k+ f9 R/ i. L' L- b& m/ P6 H$ @
static struct platform_device da850_evm_tl_leds_device = {
3 E" X7 i6 x. j4 O( R .name = "leds-gpio",
. X/ M5 }* o3 M9 z; c: `* d .id = 1,
. z W7 ~( D2 Q+ |2 [; K* s) T+ r .dev = {
3 r0 \/ n) |! m" ? .platform_data = &da850_evm_tl_leds_pdata,
6 H7 L0 y6 V) R! u& r+ | .release = led_dev_release,
; k% i- A" t+ w! h2 a; h7 A4 [ }
/ z0 p8 \% }6 x0 D% Y J};" ~* E; Y- x2 c" G4 D
! l/ A) W- \( [/ t
static int __init led_platform_init(void)
/ v7 V8 ~! Y- C( `8 W{
: K. B% ~9 V+ S9 h4 ?& I int ret;
4 j3 l4 x0 s0 V/ R#if 0& @. l3 B) N2 _8 J' ]% r' w% q! J
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; S# u$ e1 x o" y- |; S" P if (ret); Z$ A1 |$ I0 k. C
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& I. G& g$ I$ A! l% z9 W
"%d\n", ret);
3 V8 G0 A5 ~; e5 O/ X1 Y1 }/ H6 \" F#endif. F9 P( |1 f/ ]& s5 c$ s
ret = platform_device_register(&da850_evm_tl_leds_device);
2 ^5 H& f$ q& L1 w7 ]* J f if (ret)2 u N5 X( W# b, \. v5 e
pr_warning("Could not register som GPIO expander LEDS");
7 X+ o$ T, B" j0 W9 c7 U+ v else" ^6 a& T/ d+ E* b( X# a7 {' ~0 J+ g
printk(KERN_INFO "LED register sucessful!\n");
7 |/ {9 M; G) a1 D5 V
F# W5 @+ e# P' ~% ` return ret;
1 g. I/ x; y: i( l: \3 \3 T' ~}
5 B8 }' u. u/ G5 B+ O4 V; ~: P5 }6 i% c& H$ x8 j' ~" G
static void __exit led_platform_exit(void)
* m# Y% J& @ o7 ?1 o8 w! D{
4 e. J0 b6 c9 D. L$ { platform_device_unregister(&da850_evm_tl_leds_device);, ~! l2 O/ D0 E! O
7 V8 w& K9 ]1 N/ |- X* L/ ^- J
printk(KERN_INFO "LED unregister!\n");9 D4 U. g5 a0 l' o5 w# h
}0 f' {- {7 u/ v4 b+ P5 U" v
. [9 J; E' P( \3 S8 {6 l0 ^module_init(led_platform_init);
# G) Y D1 g. I* fmodule_exit(led_platform_exit);
4 u% f' F- z, a+ R
% K! I, J6 R4 N- o' L% W, r8 zMODULE_DESCRIPTION("Led platform driver");/ f& f! O( _8 I5 |
MODULE_AUTHOR("Tronlong");
! m1 e# f+ u7 r# h( w! T* ZMODULE_LICENSE("GPL");
2 r3 M/ q5 f) d T$ e. N+ z
4 M9 `5 r4 d$ I4 A9 V |
|