|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 C% l1 k' P8 ~/ x#include <linux/init.h>
) k$ N! }+ F# ]#include <linux/module.h>
1 Q! Q8 U8 b4 H; a* [#include <linux/kernel.h>
$ X2 p9 r9 C ?) s2 `$ Q" {#include <linux/types.h>
9 f+ W Q) j; Y7 n1 I#include <linux/gpio.h>3 ^$ ]' L3 M1 w- j( m
#include <linux/leds.h>
m/ S( _8 N: Z#include <linux/platform_device.h>
* n1 M* z! `/ x7 x; ^1 e" d: a3 t$ p! _8 U1 i" R: T
#include <asm/mach-types.h>
. \2 P3 v+ l2 g9 T#include <asm/mach/arch.h>0 V: f- n9 r: [, o6 J% c1 \+ z" e
#include <mach/da8xx.h>% K4 h0 M" z- L' `) v
#include <mach/mux.h>( {+ T2 g7 k0 `" ]7 V0 z5 P& ?
# ^& M* g( P9 v1 s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ Y: r$ @0 h0 u% E4 ]* q; I. s7 D
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 F) g# [) y/ b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. z' G% v! p) `* j4 M2 M5 [#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); W8 }% e+ O6 t8 k( Q
7 F5 I4 e; c% O2 B/* assign the tl som board LED-GPIOs*/$ [: R* p. R4 o' X1 \, S7 Z3 w
static const short da850_evm_tl_user_led_pins[] = {
4 H5 C7 v) b, l. ?- ]& D. {9 B /* These pins are definition at <mach/mux.h> file */6 X+ \. v3 N T' O q: l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. \. N/ c3 z/ v6 b0 f -1
* r1 y% v8 c8 ^8 h};
) t! W: i9 T$ ]
" y9 K# C: y) {+ H8 v' ~4 Nstatic struct gpio_led da850_evm_tl_leds[] = {- X1 E; d% Z8 S5 T4 V
{
! D! U$ J% T& z .active_low = 0,
- V5 T/ W: ^8 B/ P1 |; u9 [# \) n .gpio = DA850_USER_LED0,
8 x% H' \9 L1 U& o" ~ .name = "user_led0",, x ~* K+ ]& K$ k0 X
.default_trigger = "default-on",
4 ~) c, p- M5 \9 s2 b. L' j8 s9 V },: x( K( ]+ { x* A* [$ |
{7 ?. \7 o" s! d
.active_low = 0,; `! m, |& [' z6 [) E( k+ _
.gpio = DA850_USER_LED1,: u4 n+ R3 o, [5 s' n5 p, R
.name = "user_led1",8 J1 y3 n# w0 L! S! Y+ @4 P5 f
.default_trigger = "default-on",) m( f" ^) O; L, D! L
},9 T4 Z, O: X# ^: m
{
) b+ a+ @& }* v1 _7 Q .active_low = 0,
1 `. b, x+ {& [% l$ r+ j .gpio = DA850_USER_LED2,
0 L, g6 q. U8 e .name = "user_led2",! ~+ h. r3 b8 Q9 M& m3 g
.default_trigger = "default-on",
, B) d; F+ N* e% ~% x0 B" | }, h! z3 v! ]5 T, c
{; m, Z8 u0 q3 A" q
.active_low = 0,9 r8 k" _! G+ `- `- w
.gpio = DA850_USER_LED3,8 e# X* Y' e: h+ j
.name = "user_led3",9 |1 T2 I& `+ {' Z, {5 N
.default_trigger = "default-on",
! q5 @+ o/ D# b1 X/ w& G },
. R/ K F$ \ n" T1 D' a. T6 `};
) \) S, o2 L! g, [ e1 s# Y' A# n5 [. B, F* a
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 K" p. a. T! k3 C .leds = da850_evm_tl_leds,
6 d6 Q6 I$ @6 I .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 z/ \( `: @2 p, y+ x$ U! f};
! i- H& ~0 d5 @* M0 z4 Q0 Z9 b! F( w. M% D3 C) f0 B
static void led_dev_release(struct device *dev)
& Q" }3 l7 R% M/ f$ {; s& ^' G{+ j0 G- V# s n7 s# o
};
# c$ {6 _7 ^- L
) f' V- q5 ~/ G8 _2 h3 @& ^- Istatic struct platform_device da850_evm_tl_leds_device = {1 s2 M( `, K4 ]4 D- N
.name = "leds-gpio",& z5 z, Y1 e. I! Q8 z" ?- h5 S) U
.id = 1,
! a1 A5 ?: _4 F- c* u6 q1 i- G% o! z .dev = {
; D* }) _/ z" i2 n0 G# z1 Y .platform_data = &da850_evm_tl_leds_pdata,( m+ o8 Q+ i& i( h
.release = led_dev_release,
) t" F# L* P9 U( Z1 C) s1 f }
. m `7 u" N% E: k' Q2 @};
! S2 b3 u) ]$ `1 D+ s1 ^9 z- L. q& \. v# X+ e& \7 X
static int __init led_platform_init(void)# K' T2 \- C. {/ s* S
{8 k1 X3 v" A' l
int ret;9 B5 H% E- @" I4 W& o; F. f' @9 w
#if 0
+ Y+ ?, ~1 q3 h4 d( I2 ]% a+ a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, E! L- }+ H1 E/ {3 M
if (ret)8 C3 e3 {8 _3 b1 t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 S H- {/ {: l
"%d\n", ret);' `8 o8 y5 R0 x) d/ L: G0 w
#endif
2 {' c z( P$ r; r: E# s6 x ret = platform_device_register(&da850_evm_tl_leds_device);
6 |1 E6 S( d* t: X+ p if (ret)
* r$ J+ ]4 P5 u) s& S0 C8 }2 @- t, s pr_warning("Could not register som GPIO expander LEDS");
( [7 g/ T( Y7 o1 |; y" ? else
* q$ `0 b; T3 b' ^9 A$ j printk(KERN_INFO "LED register sucessful!\n");7 z9 x; [1 M( ?9 p
0 @% b7 H& l' q* Z! V return ret;
8 R* Q% G& C# q( Y; l}' Z5 D' I: x- A3 |4 @: u3 |$ o
& A' e9 C: v, Y) @' d* F; A
static void __exit led_platform_exit(void)) b' p, L4 Y8 ~. X* u9 Z
{
( T Z% D: B1 F6 K platform_device_unregister(&da850_evm_tl_leds_device);0 R5 ]1 V8 G2 f. R* j, f
& F6 [0 y. q1 c# U0 \* [ printk(KERN_INFO "LED unregister!\n");; \* p; }# e5 B/ X- ^/ }2 h
}
" x" c* B) k# y1 g7 j* v/ C, l
- l, x- M# m) N: imodule_init(led_platform_init);3 d- s! {7 t4 v) o! T
module_exit(led_platform_exit);1 f/ G. v1 d' p- n/ ]( N
# H6 {* W6 w3 ]% H8 U
MODULE_DESCRIPTION("Led platform driver");& e. N1 c# R/ E$ n+ I
MODULE_AUTHOR("Tronlong");
7 u# a! v6 b% A2 J& F% ]+ P6 p5 }% nMODULE_LICENSE("GPL");
" O0 L* m9 _. l$ z; b
[6 e9 c/ S: w; M |
|