|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& k/ k& |9 a' F#include <linux/init.h>
" O! t3 B( ~( E6 E9 D1 g#include <linux/module.h>
2 e" i9 A+ ^0 L3 L& g7 }8 M#include <linux/kernel.h> {" K9 o5 H5 l/ ? T# i: I+ g
#include <linux/types.h>9 s6 @: \. Y) Z& X
#include <linux/gpio.h>
. j5 ~9 b! f( d0 G; f#include <linux/leds.h>; R5 a2 M K% E' ?: _
#include <linux/platform_device.h>
! I7 C0 j6 F6 M: N0 B; D: Y8 `3 F! ~5 v" I5 Q
#include <asm/mach-types.h># y a2 G" ?+ p5 s8 _8 h) R& N$ C
#include <asm/mach/arch.h>
6 |' U, T, ^1 {5 f4 D#include <mach/da8xx.h>
/ s# d" d1 j" d- y) ] G( o#include <mach/mux.h>* X0 `2 A7 Y7 S
! K& l- z3 S0 C- E/ k2 }1 s#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 N" F7 D# K5 i |0 C5 p# \' O4 E#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 o- _8 {1 }0 d" @' x$ m6 Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 X+ M) a8 ]! P#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, B7 N# ^ p: u G' C% s# g1 R. ]$ v( Y0 f8 a& H% N
/* assign the tl som board LED-GPIOs*/
" v1 M E1 F+ |: kstatic const short da850_evm_tl_user_led_pins[] = {/ O* } k3 y& j! [. J1 c
/* These pins are definition at <mach/mux.h> file */8 k4 x" k- X7 \% M6 L
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 J9 B1 W4 Q$ F -1
- K$ a& L& O1 G# p};
6 a: a) D. g4 C4 V
: c/ Y) D6 `- Jstatic struct gpio_led da850_evm_tl_leds[] = {; r& @! R1 ^* S
{0 g9 b' W( g9 | q) [- D9 N
.active_low = 0,$ `5 M3 b- c) L6 M' Y4 u
.gpio = DA850_USER_LED0,* v }$ \. o. [- f% M, C3 `$ U
.name = "user_led0",
' F( l, \" i+ m5 [$ e% R/ O .default_trigger = "default-on",
- G0 N+ b% P1 p Q8 i. j },/ s1 F/ k; n1 F( U8 }' I6 ^
{
; |5 ?7 l1 _% Y# P" w+ S% \- f .active_low = 0,
' C& t7 Q/ u. \& g* V .gpio = DA850_USER_LED1,
P9 m4 z9 n0 b8 F .name = "user_led1",
/ J2 d L! Y/ G: D) i .default_trigger = "default-on",; b/ `- d; C! X. f) N, P
},; B5 z% Q2 k# L6 `( L5 H8 L% g
{
+ v$ z3 [# c" E/ I .active_low = 0,
! v% n" Q/ `3 E2 X .gpio = DA850_USER_LED2,
3 D* H! m" @) }% K6 j .name = "user_led2",
8 `1 P# S7 Q. x2 x .default_trigger = "default-on",
2 K% X6 w; ~4 R! b },' W' {3 `2 k( Z3 a. C5 Q
{5 G! [; q, F6 g$ h6 {; i1 `
.active_low = 0,
0 s+ ^0 a7 r& s0 ~/ T2 z .gpio = DA850_USER_LED3,
- }- h: v2 ?9 U2 D1 F! Z .name = "user_led3",. W. U9 v# {: [% n0 u+ X
.default_trigger = "default-on",
4 u+ r- F, s, w },2 r R5 j& ?* D+ Z. `) B
};
' m: p7 |0 r) ^3 W; |# H& y2 [/ X( _8 s$ N- @' O6 K* g
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 W/ a6 J* E! U- c3 Y* g- L .leds = da850_evm_tl_leds,
2 e3 ^- t+ o& L( t% m .num_leds = ARRAY_SIZE(da850_evm_tl_leds),& S4 Y* \& g0 d1 r
};4 n: B) |; s" Z: S/ x
7 u! e+ O) Y" q* X% Astatic void led_dev_release(struct device *dev)0 F! l( p( }4 I, t+ A3 v& P+ }
{
4 j! s. e9 `+ T) N, h2 h, \};
4 j1 t! E3 e1 f- p( o* M7 |, h* B6 P
static struct platform_device da850_evm_tl_leds_device = {
2 P" s# Q5 ^$ _ .name = "leds-gpio",1 w3 N) ~# _7 l$ A/ Q0 d
.id = 1,, S$ b" f1 |9 p( u; Y1 }# S( ], `
.dev = {; i2 x- i2 ?! u8 j, A! g: x" |( V
.platform_data = &da850_evm_tl_leds_pdata,) V6 z0 I% I- X* Y9 A
.release = led_dev_release,
+ A" b9 O' V. {6 q! } }5 p& @' a7 v" s. o7 e; \
};3 t3 }- `" m7 |/ \* [5 g2 c; }
2 W/ W! D {; m7 }
static int __init led_platform_init(void)
9 ?' P, O# ^- t5 v& c{9 E+ f' b3 i! o$ F3 L0 j
int ret;
* @) V3 D R0 E+ U; o( O6 |5 |' H& x#if 0
/ v* v7 Y* z5 a9 b' |3 Q O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( o2 D1 w( Y( A& e. K5 x" y2 ~ if (ret)' v. S9 P8 `6 {) s
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 C) k7 b2 { z4 f0 D& p1 M
"%d\n", ret);
5 p9 j/ ^; c" S1 `- z8 Y#endif) C- Z; o, r/ G: A4 r' M
ret = platform_device_register(&da850_evm_tl_leds_device);
4 E; G% K5 y, b# q9 }) f" h if (ret)
' h% B( `1 \7 @( z' r$ s pr_warning("Could not register som GPIO expander LEDS");4 U7 N/ |% O$ ^9 m, c$ D
else
& |- c9 a. z. L0 _3 v7 n1 U printk(KERN_INFO "LED register sucessful!\n");. e+ J2 J3 a" t: O# H6 j- P9 h
% @% ]- z' Q6 T4 s
return ret;
8 [1 y a- d* h- A; M8 j+ g}
5 \9 V4 c3 u# u+ B! L9 C; {
% Y# v3 X* c+ I0 k( f- l- g1 `* ystatic void __exit led_platform_exit(void)
2 D* Z/ ] h% d0 Y$ R* x. J{
8 i c+ P6 E/ W; d0 f: j platform_device_unregister(&da850_evm_tl_leds_device);
) e- i+ h2 U* f
5 e9 ?; y5 B- {$ k printk(KERN_INFO "LED unregister!\n");
, P. Z" }; C) C. b. e* z! b}1 Z1 ]5 Y. u1 ^" r' ~
0 p9 M; r0 F! b. a. y G
module_init(led_platform_init);
I: b0 k$ X0 Y2 K/ [" g6 \& f2 `module_exit(led_platform_exit);2 c1 Z8 [% t; }6 C5 }
) M6 Y+ R9 D+ nMODULE_DESCRIPTION("Led platform driver");
2 O$ {% Q; m( F6 G# r& B+ E4 ~- FMODULE_AUTHOR("Tronlong");8 }+ j$ [5 y/ P3 X
MODULE_LICENSE("GPL");: P3 _8 p+ F; s1 @" f
2 B5 D( h' d; D% X- X |
|