|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 A$ |. f" I6 T5 c& ^* u
#include <linux/init.h>% a% |- _; \3 y+ m+ u
#include <linux/module.h>0 y3 D& \; L5 c2 k6 Q+ n# M$ u& z, S
#include <linux/kernel.h>
9 V. q0 W) W) i/ D0 w#include <linux/types.h>
( M5 \$ E2 R; P6 e3 ^7 l0 G, H1 U#include <linux/gpio.h>
; ^1 h, v: M4 L+ W: l* A#include <linux/leds.h>! b+ S# G6 v9 O; O1 x) J6 o
#include <linux/platform_device.h>5 E2 j Q$ Y6 J/ A3 c$ p8 B
0 T" }5 m% H! [! B#include <asm/mach-types.h>5 Y& l: z9 ~5 Q+ m
#include <asm/mach/arch.h>& G6 n n7 C7 O. @8 _% W, B
#include <mach/da8xx.h>
8 g5 h2 F; J/ T: ?#include <mach/mux.h>
9 \2 @1 O1 F" b( i% H' T) `1 l2 F9 J8 F0 S& u" {3 {
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# E3 Q o; s! E: E) C. l#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- Y0 r8 H2 Y) K. n0 r8 T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 e6 N* e4 v1 R, z2 A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 I. A: ~6 g0 a( Q
8 B8 `& {' q* F! W$ j* p r* L/* assign the tl som board LED-GPIOs*/# g( ]( _! x6 q/ _4 G, d
static const short da850_evm_tl_user_led_pins[] = {% l/ A2 Q" U/ O
/* These pins are definition at <mach/mux.h> file */! O% r0 V. e! v5 E% R! U$ v) I* q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 r! e& M8 ~. c2 m" c0 [4 R -1
+ w4 V: o( r* D* b. g};
: u- V4 i9 H: @. i# l- a0 W9 Q% V/ x3 T7 r
static struct gpio_led da850_evm_tl_leds[] = {) F: |7 n$ p1 F, W2 \/ v' t
{- a- ^ Q9 f6 ?# q9 Y) M5 G
.active_low = 0,
* S' C4 A9 }) e, V0 B' g0 g .gpio = DA850_USER_LED0,
2 n( W+ x, J; N2 I2 u/ V( A- O .name = "user_led0",, v' G9 I# u9 b+ B
.default_trigger = "default-on",
0 ]6 r" c0 |8 V4 S- g" [# c% ~ },- ^" Q0 ?9 d# U D( m$ N
{
9 p% j% j }/ ^, x. B2 N, e .active_low = 0,. H! m" v1 V) K9 J% H2 u2 x3 X
.gpio = DA850_USER_LED1," f& L, ] {1 v; @( @$ S
.name = "user_led1",
5 S: G* x- X' [" S* b. { .default_trigger = "default-on",
2 F' Q) k$ \! D8 G/ s' P, N2 |) H },
: m' W, l7 r+ x8 \ {' ~- r$ C; ]: ~
.active_low = 0,2 E W ]2 a$ V8 N; J- @
.gpio = DA850_USER_LED2,
6 \ E. ~, q' L. \6 X. k! o: F/ l T/ Q .name = "user_led2",8 f' N9 ^- j2 o% S
.default_trigger = "default-on",- A; x, g6 y( E
},
% F; x: _, F4 T1 D {
; [% T3 ~- w' R8 W .active_low = 0,# [* F( B7 r$ G8 j5 a
.gpio = DA850_USER_LED3,
7 C" X8 N! Z$ b) z, C* f: h .name = "user_led3",4 |7 m4 Q; W& {
.default_trigger = "default-on",
5 A5 s$ _' p; B* z3 `/ M },
_# D- J5 p/ n; x4 k k7 r: E};
3 I6 S: x F/ E: d7 H
% k2 q- Q2 O" u6 j" v! Y. F/ ?static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 Y0 F9 ~' o( y1 R$ C3 f .leds = da850_evm_tl_leds,
8 |" e* H7 j+ Z) s .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( n u/ V* ]4 E0 ^4 v4 d* \};
: r7 p. f9 m8 W* n/ X! @4 H" Q! m. `' E$ N4 f( {4 I; x" p2 z% o
static void led_dev_release(struct device *dev); H* F4 m3 \$ `! Z3 s- l( \; Q9 Z# E. {
{% a' ?; O: B( u1 e5 h' r
};6 a4 h+ D0 e2 U/ W; _/ Z3 T
- n7 E+ V% o: }5 g( @* r i6 \" wstatic struct platform_device da850_evm_tl_leds_device = { v4 r+ J. C9 C* A3 w3 j
.name = "leds-gpio",) A0 t2 f/ S; {8 h) ]% L# f
.id = 1,
" U, U7 A y# }5 Q .dev = {( r5 ?/ a$ f+ T3 l
.platform_data = &da850_evm_tl_leds_pdata,* d' \' e' k4 T% m) o
.release = led_dev_release,
5 Y) m1 `3 p& ^% X }
0 Q" g) s; Q9 w};. |; R/ h$ _+ v8 n8 g
2 G. s/ N0 C' l5 b( rstatic int __init led_platform_init(void)% h+ A& t0 b6 \# Y3 L
{
8 O# g0 \2 U8 g/ n# p int ret;
" j6 L6 g$ f2 {+ [0 C i$ `9 e#if 01 Q3 X4 _$ s9 I3 _9 @; K2 {
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
|" \* N+ V0 B$ j O% C if (ret)
2 M p* T. z) I pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ @4 `/ C1 C; ~) v7 D
"%d\n", ret);
* f" `2 P. {0 i3 A9 x( c$ U/ X. Z3 @#endif3 N, e7 |5 J; n0 J2 o
ret = platform_device_register(&da850_evm_tl_leds_device);; L9 H; Y+ u- s
if (ret)9 e, h* W2 T& v/ `3 x: p
pr_warning("Could not register som GPIO expander LEDS");
" R o) {; p( x9 W" s! L else5 H$ Z0 c- N) Q
printk(KERN_INFO "LED register sucessful!\n");
+ H$ j1 d; B/ k) X, ^; M" R9 w' T. d. L
return ret;; J! ~0 ~/ B( j& Z; b0 V$ u( X
}% [3 N% q& _9 u; r
. B& E D4 d, Q2 _! ^. Ustatic void __exit led_platform_exit(void)
5 c2 d+ c/ T; j- ?2 R{% k4 B, a0 i$ q' R @
platform_device_unregister(&da850_evm_tl_leds_device);5 F% s9 e, G" ?1 e7 r
0 d& ?$ p; J- U- G) B& Y printk(KERN_INFO "LED unregister!\n");/ ~: `4 a6 a/ M6 S4 O7 y0 J
}
7 S9 a, I, u2 B( U7 R3 B) Z
. W% n9 a n; |* V4 ?' Fmodule_init(led_platform_init);1 g0 g/ v: { A$ L! Z# d
module_exit(led_platform_exit);
& s" A# @# v. {4 O- d9 z l
1 {- h* M% G! [ f2 G4 Z* {MODULE_DESCRIPTION("Led platform driver");
/ P! ^) C8 ?+ V3 e5 p( Y, kMODULE_AUTHOR("Tronlong");
' ^) G5 N9 x7 V$ O( z- P! LMODULE_LICENSE("GPL");
9 B4 \; \' E. @7 ?: k* D
1 p1 |( ^. ^3 d |
|