|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* T& G0 x8 `4 F/ l; K#include <linux/init.h>4 k, B t3 R; {- u4 H/ q% D
#include <linux/module.h>
r0 D& t) @3 D' v% v#include <linux/kernel.h>
4 Z/ ^: u& z7 e# n0 q#include <linux/types.h>
; O2 ^$ r, C( C: s. y#include <linux/gpio.h>8 F/ u6 c( q( P, Y. m
#include <linux/leds.h>: n/ E" W* l" F, v/ _
#include <linux/platform_device.h>! L1 [ N8 s# E# A$ k+ |% C+ A
# m2 O7 y& E: \: N+ \
#include <asm/mach-types.h>% F! c9 r4 d# T9 p4 U' B( O1 ]( W: s
#include <asm/mach/arch.h>5 _, G) M* g' M. M7 }3 H
#include <mach/da8xx.h>9 `7 O( @, |1 t* ~+ Y4 y# L/ t
#include <mach/mux.h>- e5 ~; F) A0 t6 X- t2 x W
* F& `: I. |& ?
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; c- H' X4 k5 ^0 @4 v% s0 q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" S' J; [1 G7 y" u! Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 m; E& z1 d+ a#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* {6 F7 z( r$ N/ L9 C- M Z T
g9 i2 Y2 V& ^/* assign the tl som board LED-GPIOs*/
5 Z1 ~9 p9 N+ [1 Hstatic const short da850_evm_tl_user_led_pins[] = {; d/ G" U6 y* Q' X! A# O
/* These pins are definition at <mach/mux.h> file */0 B# G3 L- ]! g* u: j
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 s- j' V$ d6 X }% C
-1' s) ?4 c2 N$ w5 W7 E! g
};
; z% J7 l2 G+ H. x% T7 S' m: i( \( k. I
static struct gpio_led da850_evm_tl_leds[] = {
: Q$ n, R: E4 [& v2 f" N r4 l0 z {
T3 R& T; R, A+ h; r .active_low = 0,( U( @( c( l" v' H* C1 F
.gpio = DA850_USER_LED0,5 c* _9 `4 D7 N+ G }4 d: v9 l) k
.name = "user_led0",
7 D& d3 Y) n* z c .default_trigger = "default-on", P+ B6 H3 \$ s0 g7 {( F. h+ d7 N
},. ^) i% h* O& E+ a$ ~
{
* v$ [' E% U+ j .active_low = 0,& T; t- t, I' W- G
.gpio = DA850_USER_LED1,2 O2 Y1 k9 L+ N$ ~ w9 [
.name = "user_led1",
2 m' V, x1 T& p$ ^( J .default_trigger = "default-on",
% P% u. g: {& g6 X },- Q& j; P7 Y( \) W" a' q
{
2 J" z/ j$ s2 `$ P" m .active_low = 0,9 |/ K' G; C/ k; _" i
.gpio = DA850_USER_LED2,
' T) s0 \' W" S .name = "user_led2",, J( P8 k E+ J. C! v- J2 _
.default_trigger = "default-on", L1 G6 f# B4 h R: _
},
$ ~% t' U" v7 ]2 L& S8 T0 L# e {
; ^- c$ g+ B: r, {) l/ X* {8 v .active_low = 0,
6 I3 I) J3 u, `5 ]# G4 ?% }6 o .gpio = DA850_USER_LED3,4 Y5 H; x0 a! b7 u7 F" _; y
.name = "user_led3",# q8 G! R2 a/ b* W# ?# M
.default_trigger = "default-on",* e$ h$ }) e u* l# _5 h& e
}, B; f/ E% v) y9 L: V' v {: K- L
};
, e; b) D$ F3 H; J$ J: }0 p% h1 i
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 u! q A C$ F# V2 s4 k% T" t2 e
.leds = da850_evm_tl_leds,
6 D0 d8 | u2 r* K- r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),) r: L9 _! O$ u1 L& F
};
' a9 ~: X. f0 j* q4 y" i# ^, z, Y( j, f
static void led_dev_release(struct device *dev)/ M% c: ~% Z0 i2 N
{
' ~% R }; u g. F/ A9 H};
4 C5 l: c1 y5 C+ ^( ^ N% Y8 M$ X) h/ Y) P; S e
static struct platform_device da850_evm_tl_leds_device = {- L& Q, k0 O- k6 X$ [; |
.name = "leds-gpio"," ]4 J6 n0 u! a% W
.id = 1,
A* ]: {) u4 P5 i .dev = {
- z6 b) V0 M. n# @( ^' h6 k* F c .platform_data = &da850_evm_tl_leds_pdata,. \8 ?: W) Y& x3 n( y
.release = led_dev_release,; j" v0 P! T$ q! `- _: f( h# S9 k; f) z
}
8 M6 W( j0 w9 V; H) Y6 Z" M};
- n5 o& C( K' L" Q* p- g: M
- L3 T/ R8 W% [; cstatic int __init led_platform_init(void) ^7 U* B+ ~; Y
{ B4 f" B! ]/ I3 x6 l, \
int ret;9 B1 u+ I: v/ q
#if 0* h1 a/ P+ c1 I( q3 }8 R
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 i L0 H3 C1 l! o, d3 ^9 ~4 j
if (ret)6 U1 H* s6 ~- }$ W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' E0 O) g* J1 a Z9 w
"%d\n", ret);5 i# J- n5 O+ P% a* }! `# K
#endif
3 |1 C, [- {' P: @ ret = platform_device_register(&da850_evm_tl_leds_device);) h' W" w5 y3 t2 K" b
if (ret)+ y2 g+ R# ?8 f
pr_warning("Could not register som GPIO expander LEDS");
$ m/ ]- e* A4 U else
. i4 Y$ s# q! h5 k6 M" Y) z! P printk(KERN_INFO "LED register sucessful!\n");
& C& C7 `, |; o2 S! K0 V, d2 j5 {, ~. e7 T K5 V- `' ~6 {
return ret;: r" x3 s! h+ e9 ^9 z3 f+ T" G
}
5 t2 i9 G* m* M9 e% ]# r3 L! w6 ~3 h
~$ ]( `% N: @ I) Nstatic void __exit led_platform_exit(void)
/ M' c- g; {, U( V- V( v0 b{6 j5 D3 I+ S; n
platform_device_unregister(&da850_evm_tl_leds_device);0 ]- H6 V1 b' y
* B9 |4 }1 Y8 o6 _ printk(KERN_INFO "LED unregister!\n");: z% v5 {4 E0 Z) {* a
}
% @- h3 g5 @, r3 E+ ` K+ p" h1 G. r2 |) A+ Q
module_init(led_platform_init);
+ J0 B3 @/ a e X( [module_exit(led_platform_exit);
* C) A' a0 L7 l ^) h7 {7 R7 z5 }1 L6 ]* w- x) L: d
MODULE_DESCRIPTION("Led platform driver");, F% d; i+ x# {3 m7 Y
MODULE_AUTHOR("Tronlong");" B! Y9 M, T) W) V% V+ J5 G! M) {
MODULE_LICENSE("GPL");" C/ }5 T* z9 A8 l& L' g: z* v
; N% K0 R: t* X6 w6 y; E4 t9 G9 w* c |
|