|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 S3 T, k4 W+ v) W7 d/ a#include <linux/init.h>
g# N$ ?2 h! ?1 V7 a#include <linux/module.h> q& P Q4 Y# A- n
#include <linux/kernel.h>+ J0 ]& J! w. h/ x( A! y
#include <linux/types.h>
$ U% |0 i# R6 s9 q#include <linux/gpio.h>/ r* h4 D' M6 G+ i- B
#include <linux/leds.h>3 P1 H* T. \! l0 R! d4 }9 o6 c
#include <linux/platform_device.h>
+ \+ a, h; \/ |2 ]& }# Q
. E/ r8 H7 x; Y# _) o3 p- ]. C#include <asm/mach-types.h>3 k' q$ I4 }' H: B0 m) g* Z- Q9 }
#include <asm/mach/arch.h>
$ f$ z* }9 \. Z- n- f#include <mach/da8xx.h>5 A+ t% I0 z" u: _6 @1 I) D
#include <mach/mux.h> p7 [' o9 H, M0 m U* V
/ @& A5 Z* Q% A. P: ~1 Z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) I# o u1 j/ e" c# ~
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), O' K1 k8 K( p7 F+ M- {$ ^& R8 ^
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& i( j$ k& T( u) u% Z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 c. F6 K$ n, J, r
& [ Z' z% J7 A) _! z* F; F/* assign the tl som board LED-GPIOs*/! F* O1 I+ |' c0 g
static const short da850_evm_tl_user_led_pins[] = {& m3 F! |, T* f) [/ O
/* These pins are definition at <mach/mux.h> file */
3 ~* E- p% ^9 c5 Q8 k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 h/ d, X6 o8 _) e# }: S -1
4 A, u+ w. I) d0 }: a};7 X' n4 N% j& j* H5 G/ ^: N
3 u( o' f9 u3 E8 sstatic struct gpio_led da850_evm_tl_leds[] = {1 t) Q# b7 U3 l5 X4 w
{
; J7 S/ B0 j/ ^3 m: Z6 E1 R2 m6 ? .active_low = 0,
* S2 C; j6 D; I. _4 C( v .gpio = DA850_USER_LED0,4 L) L0 S+ |) |% p( T
.name = "user_led0",8 S, J0 v, }9 |
.default_trigger = "default-on",
& n; B3 G* ?' L( O2 k: i },
/ _; a1 W2 z; J1 _. E {. y" w3 u% g+ j+ h5 D, n' K* H
.active_low = 0,
( b+ C7 Y7 j4 y0 W n7 k2 | .gpio = DA850_USER_LED1,* E$ L) i- R9 B' I9 b
.name = "user_led1",4 ?; p' s; m; B' A& N. T" O5 x
.default_trigger = "default-on",
& m- ^5 j9 T6 G- Z7 n6 b/ v }, @) w( w" ~8 W' I; d" S
{
. Q( i& p) h2 k; X3 q' A# f" {2 K .active_low = 0, Q4 }# A" b7 H$ q+ o s7 e
.gpio = DA850_USER_LED2,
3 m! I0 V4 } y3 v! M .name = "user_led2",
) [1 z J z: `, | .default_trigger = "default-on",
/ W6 c* _% T+ r" Z' N },0 s; `0 ?2 A! y; B2 j6 O
{( z' H) ^) b y; d! X8 t
.active_low = 0,
$ `9 @9 n+ X0 d% e2 H4 m .gpio = DA850_USER_LED3,2 x9 v+ P( E; S6 O7 q
.name = "user_led3",) ~1 R' v: q( U2 x8 m
.default_trigger = "default-on"," o# ]7 [4 R8 [' y' X/ m' e
},
# K( \8 E3 E, S8 K. ^};5 }7 H1 p j$ N6 d- [
& [5 O. S# i8 |+ h3 q Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& S! F1 G" j8 ]8 k7 a- w: y .leds = da850_evm_tl_leds," z5 |) R1 V* M" x0 f& H$ w, j- o
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 g4 y8 g$ p; L; N3 H- G
};
; U* z# l% Y' Y( a( B. `( W$ @# a9 \* T3 Y( \# t6 ]9 }4 J
static void led_dev_release(struct device *dev)
2 X1 x: A6 | X7 P4 z{
1 I$ m9 G& w! w, A& u+ ~};; ?* s; D2 P( @. G: J6 E
- f" f7 w, g& I. ^/ k
static struct platform_device da850_evm_tl_leds_device = {$ ]; U/ W; }2 B4 |
.name = "leds-gpio",1 L4 S8 y2 c$ G1 P$ _+ X
.id = 1,
! j' K3 Y& J9 L5 | .dev = {, T3 c' m1 D! l! |' Y: H
.platform_data = &da850_evm_tl_leds_pdata,5 i" e$ {2 d# T) U8 ~
.release = led_dev_release,
2 h; W, f. d, z1 r9 G1 P }
) [' M) a# O1 {1 `/ h1 f- X& E};
& X& @& U3 V% g& w' u$ n' [5 N L9 \! F* P9 Z
static int __init led_platform_init(void)
+ a! v& \; v$ w9 ~9 z m1 C) \. ~{3 _: S- x, A/ I9 z6 k
int ret;
D% W' h9 d2 y7 I1 q/ a#if 0) |# i! x3 N+ P+ C7 r/ D9 Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 e% b; E/ z( ~8 v9 d
if (ret)5 l/ i* h+ J6 w( B9 g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 Y7 Z8 t) i: ?& u1 m
"%d\n", ret);
% D6 n7 S- z. f! s" W#endif$ ]8 X1 L# F/ D& V
ret = platform_device_register(&da850_evm_tl_leds_device);4 m" F( [8 r, Q. Z
if (ret)
) g0 ]! S" r' r3 x/ Y( a+ r8 G pr_warning("Could not register som GPIO expander LEDS");2 e1 N/ a, M2 q4 `1 G
else
+ L- d- Q: X0 [9 i; q printk(KERN_INFO "LED register sucessful!\n");
# G! Q N( B6 B$ j
4 C3 Z! e2 c9 d return ret;: M" p! P# {- w) c% H
}. ?# }! {8 n9 A* Y, H
$ n# @8 }0 z: G# P; w6 F7 S3 S+ w7 ostatic void __exit led_platform_exit(void)4 x; i" L8 }0 x+ ^ F9 Z5 j/ z8 `
{) z, }+ Z5 t' T& ?7 _ p
platform_device_unregister(&da850_evm_tl_leds_device);
1 v0 o# h: a/ k- W. C& T6 L" @) f7 o
printk(KERN_INFO "LED unregister!\n");3 p0 @# c1 W0 [+ F: \* c9 Y
}
1 t& [$ S6 o9 M/ N) d
! j1 ~5 R6 R4 w5 ~ n+ _/ lmodule_init(led_platform_init);
) @- f9 m! Y+ B* Z# Kmodule_exit(led_platform_exit);
5 W5 T. ?2 _/ |* X" t3 L( y) R
6 _) U0 L7 H( O; I; k b" bMODULE_DESCRIPTION("Led platform driver");* `4 H$ L! X1 d+ S4 x
MODULE_AUTHOR("Tronlong");
( A* {& Y( B( p6 kMODULE_LICENSE("GPL");
( i, A" ]' }4 O2 P8 b( j8 r# ^( \0 n l( T) y) E* x; U$ d: u
|
|