|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! G$ a5 y( K, H! r# f$ I
#include <linux/init.h> P% c |3 g/ f1 n
#include <linux/module.h>
, z7 Q( D# @: X; Y3 K#include <linux/kernel.h>
Z$ K# C! [9 w8 X4 g3 I( q! b#include <linux/types.h>
_6 s& R, g, h8 }& O( q#include <linux/gpio.h>
+ g! \4 P% R5 J; d% E0 f r7 B#include <linux/leds.h>
# J, m1 H" I( T#include <linux/platform_device.h>
, }0 w* V, I* b- F4 }8 V/ e
( D/ B" C2 K# R4 h S' F& V& N) a6 F#include <asm/mach-types.h>) h5 Y4 k; b# b- p+ F
#include <asm/mach/arch.h> V5 ]: O; V" q0 }9 ?
#include <mach/da8xx.h>& k) w2 {4 u1 a
#include <mach/mux.h>
A# j u8 G. J1 L6 l, |
8 d* J& E8 E" E1 [$ Z4 f( B8 Z0 a#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); n3 H% s5 T8 y. a% B! J* Y! m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' ~6 @2 U' Y* e$ B( o#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 F% y! [; I- z/ }2 C, U0 J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ M( K5 ~$ U6 y% x2 j9 w$ i( L
% D. `5 Z2 m& i/ r6 n$ K/* assign the tl som board LED-GPIOs*/: b: S1 H1 e! g( J- y: U: i4 B
static const short da850_evm_tl_user_led_pins[] = {
, P& ^( X3 v5 M9 m* C, } /* These pins are definition at <mach/mux.h> file */ t' S& d; w* i4 Y% o$ Q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: g1 O4 |! a& w
-1
: c+ z# q& n/ h y};; A* G L- q. P
( `" s0 w3 K' N7 U4 R8 Y" z3 K! e
static struct gpio_led da850_evm_tl_leds[] = {1 E" C/ Y! o5 j" Z6 V' c
{
3 I+ T; \1 s' {& Z) O/ k; B .active_low = 0,
$ O+ a* V2 l1 q! ^+ _( |, N" l .gpio = DA850_USER_LED0, h2 k; b) @; {2 U3 i U& B2 x
.name = "user_led0",
1 I- b9 P, z$ X1 ` } .default_trigger = "default-on",* v) r7 O% g! }- h3 O! d, U
},
( g5 J) D- _- W! P0 _- n% k. y {
3 y7 w/ g5 ~. H6 `; d .active_low = 0," _1 X% _* T L: f4 z/ g7 J
.gpio = DA850_USER_LED1,$ B5 D* B* l' u
.name = "user_led1",# C: K- q* {. f/ ?
.default_trigger = "default-on",
% q7 J# j: y/ [) @. D1 d },
+ R1 [8 E' m$ c- k2 i {
# b1 C! ~( M' Z% X9 j .active_low = 0,( F- v, b" A+ z6 w$ M1 d* n
.gpio = DA850_USER_LED2,; K+ ]" ~1 X+ e& _" D0 O1 a3 A
.name = "user_led2",8 |; o1 n c* D: M
.default_trigger = "default-on",
$ Z6 n1 u: s# M) D! j- x1 s" n },3 {, E9 d+ U! B+ |
{
5 E# ~- [( M6 n5 V4 v1 G+ [4 b .active_low = 0,4 _+ c$ w0 n! T, N
.gpio = DA850_USER_LED3,
( N8 Z) D! D% `& K" P .name = "user_led3",: g9 P' e& [; T9 ~
.default_trigger = "default-on",% r& I: A0 L5 S" i7 [
},4 W4 [ @/ S" V1 p B
};) P( W3 u8 [. _/ [1 E b+ a u/ g
6 u" g" a9 _+ V6 ^+ v& ]* wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( C) u- O; }) ^. b- _
.leds = da850_evm_tl_leds,: v& p9 M$ ~7 W& q% ^4 H5 F, C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 U* {# s) H& |# K
};% S' ], ]' o( V
% I( v5 P, y% L7 ~static void led_dev_release(struct device *dev)* b8 I& k& J$ v% I
{6 K! @* ^! q4 E* C9 I
};
" i- ]' E4 k# y+ @9 O$ `7 S
. x) V% I/ P5 f2 N% k' ustatic struct platform_device da850_evm_tl_leds_device = {2 w9 b; t; D) I% {0 p
.name = "leds-gpio",+ E3 B8 q# s( C6 o+ a" M6 Q
.id = 1,
! B( i: e7 l' F' |2 K' M .dev = {
+ D# d) H' n/ ]% Y .platform_data = &da850_evm_tl_leds_pdata,. v! U1 D6 P3 X- j: H
.release = led_dev_release,
7 N: m1 a! L1 _- j' }- x }2 g+ @) \% Z) Y. u# ]* Y4 T
};
5 c' ~5 X$ G: G7 X1 a0 i* z' ?& B& U; _9 E4 J
static int __init led_platform_init(void)
5 T- [; F( I. m, x& R( ~9 k0 |{
" n8 D1 b7 G5 l$ r4 Z6 J1 R int ret;" @( H( e$ W1 b" E- u* o; ^/ X. e
#if 0
! t7 n) l% R2 H+ u9 r ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& H; ?! ~% t- w0 g' _8 W! z
if (ret)5 D' @; U! q; |5 ~7 K% V2 H
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 O5 o& d- @3 O$ G" W1 h. E "%d\n", ret);
7 n3 H5 o' c/ M( m% }+ Z" Z j1 ]#endif5 }" W( Z" a g @# p
ret = platform_device_register(&da850_evm_tl_leds_device);
4 I$ h. K" o/ R1 f5 ?% |# A& D, C; L if (ret)
8 O& l6 U3 V! z; N1 a* E pr_warning("Could not register som GPIO expander LEDS");2 \/ l Q4 G$ M' g
else* A: t! T2 D M. x0 _) |/ p
printk(KERN_INFO "LED register sucessful!\n");
1 G' x9 ^' H0 f% @: \5 T( r2 _1 Y; V
return ret;
U+ O, E0 w/ ^' ]+ ~7 R, \}
r( T4 B# V$ {' P9 _5 I/ D; j" x: z$ a
static void __exit led_platform_exit(void)1 F6 K" B6 M3 m8 {9 ^* X9 L B
{/ ?0 n i' G3 b+ {9 v& b# |
platform_device_unregister(&da850_evm_tl_leds_device);
& m( [5 P" K5 N1 H0 Q) w! R/ J
* D5 C! o! Q3 L/ a: X printk(KERN_INFO "LED unregister!\n");
7 r* ~. m- B" Y" L, K}
5 J! j. ] D& H" P# f1 h# K- V3 Q* B
module_init(led_platform_init);& g2 u. P" `, \1 o1 L d9 m
module_exit(led_platform_exit);
{* A. z+ I( k" I: I. J8 [( Y7 {! I! S( s% {8 g
MODULE_DESCRIPTION("Led platform driver");( r/ [! }4 G* R
MODULE_AUTHOR("Tronlong");
2 r: a; v8 x. U; v6 f" n$ J GMODULE_LICENSE("GPL");
7 ?& X$ u+ k& ^7 ?
2 {2 P! X. u# ` Q |
|