|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' M& V) x; R3 x! v; p1 N
#include <linux/init.h>$ h( ~$ r+ \; C9 o
#include <linux/module.h>9 s5 j& R6 ?" z. n1 e
#include <linux/kernel.h>) Y8 O# a$ C. q4 @7 g( |* }
#include <linux/types.h>- b6 X b- r8 e. i
#include <linux/gpio.h>
) s! d# R& i2 y; b9 ?9 I. y#include <linux/leds.h>4 i- k& y' M; B; _0 \6 x2 ?$ ^
#include <linux/platform_device.h>+ y9 f! K" ?3 j6 {* d5 p |
) U7 H/ n& t1 i9 Z6 Y( \#include <asm/mach-types.h>5 ]6 D# y2 x9 T
#include <asm/mach/arch.h>
1 o% q+ h( Z% x* v#include <mach/da8xx.h>
: L- L+ o/ }. c, d+ M7 Q1 z$ I#include <mach/mux.h>
$ }5 B- t) d" _2 z7 F% s# h) N- H! M: E6 J& A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) U: M/ ~. c! h5 n7 X. f
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( {. d# p( K0 P q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ @8 d G: o+ r
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( i6 Y; U0 W# H# h' W$ M- U
' i4 c( l( a* J/* assign the tl som board LED-GPIOs*/5 z1 e. ~: O1 a( z1 w7 k( `
static const short da850_evm_tl_user_led_pins[] = {# V, m0 v* _0 U( l7 Z
/* These pins are definition at <mach/mux.h> file */
, n' @9 U- y) I8 s C" C. | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 L l% O! S& T: _' t1 O -1
/ |& u: A. P( ^5 Z7 I3 O" q) M};
6 o1 J% p) ?& t+ ^3 |1 B; d% y' w. q- y$ G6 k
static struct gpio_led da850_evm_tl_leds[] = {+ O! {0 A! o: b3 n9 S: O
{4 ~, r' y2 }5 b5 o. V/ L* F
.active_low = 0,! Q! J2 l7 Z, N8 n0 b6 ^
.gpio = DA850_USER_LED0,0 S/ y }( [2 ?
.name = "user_led0",2 f& o7 [# B. ~% Z ^3 `/ z9 W
.default_trigger = "default-on",
( r3 j" @% h( N* R },6 X. j q0 `7 l2 V# _9 {
{: q, p8 x8 o3 ]$ H' b/ ^) y
.active_low = 0,! l3 ~1 q4 o- x6 b. }# K0 s- I
.gpio = DA850_USER_LED1,( u2 |+ w+ I2 |
.name = "user_led1",5 p$ Q5 H6 Q" @3 ]' U
.default_trigger = "default-on",, F+ D! y9 R" A: i; {' {5 e) `
},
2 j& |' F, _# A4 k {
8 O- J* s3 x/ G .active_low = 0,3 p' A7 f+ g, R+ ]+ \
.gpio = DA850_USER_LED2,
; P& x* Y/ Z9 U4 D- f* ?) n$ } .name = "user_led2",+ c5 Z' d8 L- D* O- ^) f% ]$ x
.default_trigger = "default-on",- p% @) X5 p4 t$ F3 x- O& t [
},
3 H* L$ n: K' @$ F {
+ b/ J2 f, U8 v3 X2 e* w/ J2 n .active_low = 0,
' _* J' g o" v2 f9 |, w" i .gpio = DA850_USER_LED3,
2 o1 ^$ M" [ N! E1 i .name = "user_led3",! C' m+ B; {8 [2 H, ~
.default_trigger = "default-on",
0 J- I8 Q# y- T; k$ G },
. K# b5 Q7 ~1 ?: |};' N7 n7 q( ` x
, W) k9 T) D. P4 n9 i
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' k2 J- s4 l- E$ [- u' y- H' O! \2 u .leds = da850_evm_tl_leds,
. Z- K2 b( G0 x5 R .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: K0 p3 C% } v: I+ C9 T
};
+ @: B3 G" k P+ i, J1 z9 R( s8 b
static void led_dev_release(struct device *dev)
1 i1 _' `( u- v/ C: F3 I3 Q{
/ ~. D% E4 c. E( U9 O( y}; i% n1 W$ D) i0 w8 n n5 p( |
3 ~0 c4 |9 |% p; sstatic struct platform_device da850_evm_tl_leds_device = {
9 J0 q6 z& Q" w9 L. b- x# ^ .name = "leds-gpio",
4 c! e! a7 |1 L7 k) _ .id = 1,
: b7 g3 _/ m9 h+ O% g6 u .dev = {7 i- W/ Q* t' {. V/ `% D7 N, C
.platform_data = &da850_evm_tl_leds_pdata,$ f# T3 w: c% ?# `0 l0 s
.release = led_dev_release,* |8 B+ w6 K- F+ y. R; \5 ~
}' B% H4 ?- ]; d: J4 t
};
% O& f# D" ]5 f; s3 w& E
& c: U: s& Q7 c$ \& W) ^ Ustatic int __init led_platform_init(void)
P) ] |% t8 `0 j1 W5 e4 l{) G" a2 m$ ^. K6 U9 Y6 g6 F: e
int ret;- y" @$ W) {6 `& o
#if 0
3 ~9 u, I+ q4 h! F ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 M) K4 U$ I0 ?, G if (ret)& U. [/ P& x, {3 B) `
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; n; y/ X* H* ?4 t4 N$ O6 r5 F
"%d\n", ret);. G" d& h) b, A& g# h( l% L
#endif, O+ F5 \9 {) w; r; T" ^
ret = platform_device_register(&da850_evm_tl_leds_device);* ~: m0 [+ _' G* e8 L. F1 L3 C
if (ret)
6 |% G1 K, i. |+ C pr_warning("Could not register som GPIO expander LEDS");+ n; T* x7 x& [$ U) q! `' _$ b# P
else
& p8 N" R" L' B" w9 C/ _ printk(KERN_INFO "LED register sucessful!\n");1 Q/ b2 ?* e! |7 b1 Q- n
, m$ y5 S2 D- q, b+ j$ F. t return ret;
( A" W5 t" e9 T' j# c0 b& T t- F6 U}
0 a4 ]3 }' o0 I5 ]: {, I7 U
4 l* R- g% L, \- v$ N, Xstatic void __exit led_platform_exit(void)
4 O" T. a& S, y4 B{
2 b$ t5 H2 P9 k) m6 R, o8 t1 l platform_device_unregister(&da850_evm_tl_leds_device);! c: c6 ~9 C- ~
[- ^# U5 `" E$ B( v" { printk(KERN_INFO "LED unregister!\n");, Y1 ^5 Q3 g% p+ ]0 w" t; e6 S6 L2 j
}
) v9 o) i( \: q& f+ r7 H+ B5 E+ l' P: r: w: n3 I
module_init(led_platform_init);6 p( R3 |. U, _0 y2 ]9 h
module_exit(led_platform_exit);
' |0 p" V ^) r0 p+ a* k# \! C2 e7 D1 |4 @, w# l. T2 w
MODULE_DESCRIPTION("Led platform driver");. T0 t; i8 E- Z: \* K
MODULE_AUTHOR("Tronlong");4 U2 t7 l0 n& ^6 ]
MODULE_LICENSE("GPL");
1 B6 G5 a3 e1 T: t8 m; w1 a
* W* z j) m# X* K& {; E q |
|