|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: g c% J- f7 E0 X# \
#include <linux/init.h>, [. x* |* h, I! G" Z- Q& ]9 r
#include <linux/module.h>
- [; R& x6 j; T5 e#include <linux/kernel.h>8 K2 h- H- I' \! ^
#include <linux/types.h>
/ g% Y! F4 V. I#include <linux/gpio.h>
" J# t+ g6 S ]7 [0 p4 m- d9 V9 e#include <linux/leds.h>
! l' R. O* G! p1 I#include <linux/platform_device.h>3 T! _. ^$ o3 J! f1 T8 T
5 a8 F5 N! c% K4 w$ U) r/ ^
#include <asm/mach-types.h>, s" N* q x ? i3 L* U; {3 d
#include <asm/mach/arch.h>' d, a; s% U; I* d* @
#include <mach/da8xx.h>
7 L* I9 ~, E4 F* g#include <mach/mux.h>
; p4 }' V' \0 s) I" i7 K5 h+ E) t+ I$ R
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! y4 ?, V2 s- a$ J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) w% s+ H) Z- I9 i. E2 }9 k6 B
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 m `/ @0 F1 w" s) f#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): f! V+ P+ W; c+ P) w a
; ]; y5 Y" X; o/ q/* assign the tl som board LED-GPIOs*/2 q7 O/ n( h" Z
static const short da850_evm_tl_user_led_pins[] = {
8 ~ t! h0 Z. Y; R* z /* These pins are definition at <mach/mux.h> file */3 r( O) T2 K- |, `+ p x5 P- b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 \! G* o( g" I) J+ z! J -1
5 u5 o$ U! Z# U0 W- Q K0 e};( w: @* i* Z) n
2 e i1 k, K6 R+ r1 y8 Ostatic struct gpio_led da850_evm_tl_leds[] = {
/ |5 `( E% d$ k9 } {
O7 G# y L# M& {' }1 o .active_low = 0,
! A1 |' f2 _2 d& V; J .gpio = DA850_USER_LED0,7 h5 t) }( T# ~: }1 C/ b: p
.name = "user_led0",
5 Z4 g$ M" E9 ~5 z6 G7 ?7 _ .default_trigger = "default-on",4 K. _8 C+ w' T
},: T; ~6 K5 d8 d
{! L" n; {+ m$ m5 L
.active_low = 0,$ V C7 u4 V0 d
.gpio = DA850_USER_LED1,
" C- }/ w E, I" V0 A- C& ~ .name = "user_led1",
% V7 S v8 g. x6 B9 h- H/ ~ .default_trigger = "default-on",1 J* Z. o: J1 D+ E3 w- }% M, N& x
},
9 ^; r+ p0 J! o, V+ d6 F% m% } {2 o$ f2 W/ `* n& l
.active_low = 0,) C, L; x& |8 G! w; X6 N4 A" V1 T
.gpio = DA850_USER_LED2,% w% u% o0 `; A2 k7 K6 H& F3 [
.name = "user_led2",$ L+ A0 A' ~4 Q, i0 B6 n
.default_trigger = "default-on",8 J9 M" D+ |: z
},
! a: o5 @+ k( D& g1 v1 M/ A# k {
/ B/ J! f; p6 }& m# t! m, s .active_low = 0,
8 ?% e0 | y5 y .gpio = DA850_USER_LED3,, v& G }- k4 {, O
.name = "user_led3",0 v4 n' n- R, @ {6 R3 m7 u, I6 |
.default_trigger = "default-on",
& e+ d N3 F8 |& z) l },
. a$ B* K( P" O, X# Y( E};
$ e' ~. e& a2 q' u! x6 |% y4 x' n. [: ]4 ?' l' H3 `, {% r# P
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: O0 M: x9 W/ \- c( [* N! u
.leds = da850_evm_tl_leds,
" W! x! O8 z5 l2 C .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ A; f0 n1 u6 e# n% I$ I3 W};
2 @' J- c! x0 D- G8 w, Y, C
, U& r0 x- @; rstatic void led_dev_release(struct device *dev)
, J U& w; ]$ e+ c{" x7 ~# m" y+ N
};
7 T; l* \8 P8 v
! o7 L" a8 G- `0 }) tstatic struct platform_device da850_evm_tl_leds_device = {
4 K8 F; h" T3 I! N. \: _: @! ` .name = "leds-gpio",
2 X, O( }1 q0 h- B" ~( Y .id = 1,0 L: `4 o9 i* e7 }
.dev = {
, A" G( ?7 Y& v5 } .platform_data = &da850_evm_tl_leds_pdata,, _* ]9 V& W0 C
.release = led_dev_release,8 [: T" s+ M9 o& B+ P, q. Q
}
2 L! C1 G) y# I! b6 M% v% W$ _};
5 m$ j/ U6 F) M! c$ W8 K* l. q
, m) k! W5 q+ v9 pstatic int __init led_platform_init(void)& y/ O0 Z- j' k8 x. x
{
: z @! [2 X, I/ n* |: ~ int ret;
, k# S7 f0 B8 O. Y7 p#if 0
7 ^$ Z) Q+ e" l1 {2 m ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% `/ g3 a+ X) o& W7 o3 ~; v: M
if (ret)/ F3 Z2 q0 e! W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: M; q( f: K7 w0 k- ~' R, d& Z, K% W "%d\n", ret);
# g2 F/ V6 D6 v q#endif6 O, _) j5 o# E, h
ret = platform_device_register(&da850_evm_tl_leds_device);
) T9 E4 l+ O8 [0 |# |3 F9 ]- S0 }. o if (ret)
) W6 r* |6 ?* O4 K3 C& g5 e. M# R# \ pr_warning("Could not register som GPIO expander LEDS");
6 q0 |$ E! Q( ^2 u a4 Y else
: K4 `! j9 T, t( m% g! S# T, X printk(KERN_INFO "LED register sucessful!\n");, E9 y) K% W) {( u( t0 |
7 L1 U: \4 H5 f return ret;
2 ? f; t# z; q, I* i}
% C9 Z9 T$ a% O7 _; @- b4 c$ A8 u+ r
9 A: S; |$ h# `- z5 E( k4 Pstatic void __exit led_platform_exit(void)
, r' }9 f7 j( G( R{
, U. M1 q1 B( ]) @( g) M. H platform_device_unregister(&da850_evm_tl_leds_device);
0 _; P2 m* x' o% F! c
) r- j! Y. G1 _; m3 X printk(KERN_INFO "LED unregister!\n");% i* P" `# q/ K- J) w; g
}
' J4 t" R: @0 @: S/ C4 ~3 A" }% ~ I1 V/ E6 W. T8 {, S
module_init(led_platform_init);
- d: e) V( Q1 j/ \9 e/ ]+ rmodule_exit(led_platform_exit);
: S. L7 ^ N; {$ d. V p0 T/ ]) m- U' @# p+ ~4 t& |' `9 Z
MODULE_DESCRIPTION("Led platform driver");
% n! H5 [) E+ w7 D: ^$ P$ c" rMODULE_AUTHOR("Tronlong");
$ `% Z2 B5 A7 \MODULE_LICENSE("GPL");) z. @9 u" W2 x- F9 f: G2 e3 s5 i
" H9 ]4 M1 q0 @4 V: k7 q4 c- t |
|