|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* M7 n, m( B8 t. G; ~. B+ H#include <linux/init.h>( H3 q6 D q Z
#include <linux/module.h>: A7 O- z7 D8 u* t# K
#include <linux/kernel.h>, a% H; H' s. P: a
#include <linux/types.h>
0 n- z& i% G* O/ N* c" b#include <linux/gpio.h>
. c( Z0 M' l% `$ i+ f& u! ]#include <linux/leds.h>
% k, Y" N) j! i! d; h8 v4 r#include <linux/platform_device.h>! y1 S$ Z/ Z4 h
) |3 V" D- A2 P# u( w$ n p. ^1 C
#include <asm/mach-types.h>
. S2 S. t8 m4 Z1 j/ E" _#include <asm/mach/arch.h>
. x: ]# R* d+ @$ s1 k( d$ `#include <mach/da8xx.h>
) S5 d, J ]) J/ F1 T4 [7 R#include <mach/mux.h>
# q2 l' ^' s! G) P6 v* O
( m$ o6 S+ z/ ?( Z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). \4 K' g7 V+ N" U) ?9 |5 l1 C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% Q$ j1 G. O: [1 f, f! i# D
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% J$ c5 T6 |: W: h
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& V5 L. I$ Z3 ?( M* H* _2 L# S0 `" N3 j
/* assign the tl som board LED-GPIOs*/
7 ]. f4 q* G. qstatic const short da850_evm_tl_user_led_pins[] = {, W* l' }" Y+ h
/* These pins are definition at <mach/mux.h> file */
$ o! s5 e3 Q0 J! l4 R DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# }) f) i% T4 [: {, G -1
' p/ e( D8 P U0 h1 ]$ v};
: [2 d/ p& n" V; H- B- x1 S; M9 X! F
static struct gpio_led da850_evm_tl_leds[] = {) M8 `7 K+ o- k4 r" I& s
{
2 X X" G E7 M* C1 l; x .active_low = 0,
$ [0 P, Q4 z, l6 [ .gpio = DA850_USER_LED0,7 X" t. }% Y! y' s H
.name = "user_led0",
0 Y3 E# }+ i I9 A# B1 s' g3 v( R .default_trigger = "default-on",2 C. Y6 ]& `, J; i
},
, P0 z' i- T# _- T |- y, x {
5 W( Z' O. H8 n .active_low = 0,
0 `# p6 d+ G( E# g2 [8 P .gpio = DA850_USER_LED1,
! v* M: b- I/ J: N6 s .name = "user_led1",0 y0 V0 i" t$ W6 p% F; `! P
.default_trigger = "default-on",# O1 v- C" c2 K( x% x: J* D' ~
},+ u+ `- N$ S. P* G- v+ g
{
# k5 U5 i i* V0 k .active_low = 0," s- l- b( \3 B2 d
.gpio = DA850_USER_LED2,
* L6 N0 R9 Q0 B K+ l+ k .name = "user_led2",9 i/ z& o% h* L0 }
.default_trigger = "default-on",
9 u; N7 z2 B2 J @ u j },) n f" y/ @) v) Q
{9 L! t# `( k( k
.active_low = 0,
# d' j) ?( A% o4 @- j% X) ]1 E2 ?( I .gpio = DA850_USER_LED3,- E2 E4 |% o4 m# N' f
.name = "user_led3",
; ] k" B! ~2 u$ x .default_trigger = "default-on",* F* u; Z6 J/ X6 d* y% A! _- S
},5 C7 i- r2 i# w
};
{$ c1 u- H: x" V. h0 B& ^9 Y/ v8 u5 o' ?' u* ]% J
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ e4 _ c3 u5 n. M
.leds = da850_evm_tl_leds,
# a5 r$ s5 M2 u5 ^( I .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 o; c- s. }. O( e" P( v- x* U};, Y8 [/ G' P3 q, ~
" b: @( g- w; b1 j* _0 `
static void led_dev_release(struct device *dev)
3 t: R6 S2 l' B! f& J9 v{
& W+ e1 G+ i; H0 D6 q" M1 [, n) X W};
9 r/ }$ E8 S# L/ m
/ j! A" ^3 a6 | E6 H# sstatic struct platform_device da850_evm_tl_leds_device = {0 m x: [, ` A4 N7 Y/ h
.name = "leds-gpio",
6 L, ?2 W, j$ y/ Y1 i" y .id = 1,
$ q$ j* n% U9 O2 r! N' e0 d& n .dev = { B" Y1 ^! N% l4 X- G
.platform_data = &da850_evm_tl_leds_pdata,1 O: X5 c& x1 m
.release = led_dev_release,/ q; ]' n! J& o4 |" v" ]
}* x! i9 p, ^4 q* ^
};1 R3 n% c( ~% k
: D6 V: X) [" e" l/ v9 P, L3 ystatic int __init led_platform_init(void)5 g/ b* X, ~* s) B& Y W/ g
{* k5 b, M, M# k# t
int ret;
" B" |7 a# j3 p' ?#if 0' }0 g$ G e! `% ^2 @; X3 W' C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 W: x' j) s, h- N8 m/ I
if (ret)
" Z) s2 Y D. }0 m: t pr_warning("da850_evm_tl_leds_init : User LED mux failed :", n4 b: p( g% a( T
"%d\n", ret);
$ U- U. E, d# {( q! N. m$ ~ y; O( F9 E#endif* P8 o) H2 M* ~$ f2 o
ret = platform_device_register(&da850_evm_tl_leds_device);
% q5 o6 L) A% x6 q4 R. W if (ret)
5 L& b5 A7 m9 O* l0 ? pr_warning("Could not register som GPIO expander LEDS");0 f$ a* ~! o4 j* P! _
else3 u. z' g1 ?% n5 l9 ?* W
printk(KERN_INFO "LED register sucessful!\n");% H$ \7 f, d6 |/ w2 M! k
- L* E1 N( D0 Z, F return ret;
% {1 \4 A, @3 k) p" X) M% p A6 S}9 Y- m$ i: N/ q+ e' ^9 X
5 {% D6 \- ]8 O/ X0 x1 x& N1 j
static void __exit led_platform_exit(void)
# w6 Y0 m2 o* n/ u{) C/ f, O5 R% C( k* B8 O/ i) l
platform_device_unregister(&da850_evm_tl_leds_device);9 I. N, Y6 [1 g3 T0 g
5 W& Q! h1 C9 ]1 r% c: L) T printk(KERN_INFO "LED unregister!\n");
3 ^+ b- S$ q+ U* U3 O2 _}3 u$ k- a3 G* G7 _" F8 `. h; E4 k4 n
7 s% N% c8 S" O7 }4 D3 ?% D2 ^" ~ rmodule_init(led_platform_init);
' x# ]4 q6 K5 r( e$ _% J2 P8 a# Vmodule_exit(led_platform_exit);
0 V) A' S. K4 o9 x# V( ~% G0 f/ y
* W( a) [1 d) iMODULE_DESCRIPTION("Led platform driver");4 C! T7 t" D# ?+ {# m
MODULE_AUTHOR("Tronlong");
* F# x& p! B% v" k% }MODULE_LICENSE("GPL");
X z; x1 `* b" z0 P5 i) \) S) e: L3 _
|
|