|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 @: N* u& `% p5 R( b- V
#include <linux/init.h>
3 `" O5 O$ U. F1 N#include <linux/module.h>7 _ D3 b+ [0 o. z" O
#include <linux/kernel.h>8 q1 I" R" \4 s& g: ^3 i# X
#include <linux/types.h>$ R- v3 w$ P4 |4 P& k) _7 |
#include <linux/gpio.h>
`9 ~3 U* y h* [# R#include <linux/leds.h>
R; b# L# E& @. Z! `6 `#include <linux/platform_device.h>+ P, m1 @3 Q) n! P+ | @: C; b! L$ `
8 y8 n& R5 V3 q0 K#include <asm/mach-types.h>8 B b8 r: q9 E7 U3 R
#include <asm/mach/arch.h>
4 @& |8 I3 c/ T+ s; j#include <mach/da8xx.h>
; o+ T8 t! Q/ O* C, j#include <mach/mux.h>
: G& I0 W: W7 x; B" b, \
5 _: Q: p/ v$ _( e8 _#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): @% q; s, W5 W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 K; v n7 |3 ^' n#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ |/ ?* b& [( X0 D3 x; K, s! p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# j' _1 K+ T; v) H4 b* N2 F5 K1 @
' r! d7 S2 t+ Z8 _! T3 W
/* assign the tl som board LED-GPIOs*/; d/ l* P& X8 j& \6 ?: `9 I) f
static const short da850_evm_tl_user_led_pins[] = {
: y+ k3 ] {: O4 Y /* These pins are definition at <mach/mux.h> file */
9 N" K( S; E' o; @* {$ r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 i& o" U- w5 I# O4 G- T/ S( T9 {2 m -1# [: t5 Y# h' x4 r1 ]7 ]& {
};2 f! p9 T7 W6 N p
$ ^9 B4 x& S1 C- j3 F) {static struct gpio_led da850_evm_tl_leds[] = {+ J9 E8 o% W5 A F5 m8 \& p
{
' R5 b5 y H2 m( v .active_low = 0,/ s! j J+ S: D- {* E( u! U+ v2 w
.gpio = DA850_USER_LED0,
* \+ T* a3 b' y. P/ P; @1 ]% ^ .name = "user_led0",
: T0 ~' u0 M+ r1 h$ B5 { .default_trigger = "default-on",
+ K5 y! H, l/ G) O+ k/ f/ L7 Y },/ c: {0 V# q; G4 W- }* m" V/ I
{
5 U: E# N' `" d* ]* X% R .active_low = 0,
% d, x2 K0 Z( ]. d( i .gpio = DA850_USER_LED1,
3 n5 ~, {" i! w- j .name = "user_led1",; g. P6 e n! {
.default_trigger = "default-on",
. [5 Z* |( \9 w2 ^ },
% G7 [% j' w G7 r; N6 | {
8 Z2 v* p' w9 i9 J4 @ .active_low = 0,
/ T+ L% J$ }& {8 @( S! n; E .gpio = DA850_USER_LED2,! j3 S, b4 J9 Y9 {+ q
.name = "user_led2",* B* f1 i7 r1 H; t+ L1 g
.default_trigger = "default-on",0 L/ C" t$ q: ~8 ]- @! V% `
},, g ?# j0 Y D+ G
{
: \0 B* J t0 f .active_low = 0,
- p$ h8 q" P2 o .gpio = DA850_USER_LED3,* Z- o: s k0 ~5 v+ N* u
.name = "user_led3",
( y6 ]2 P3 h( N) G; n6 O .default_trigger = "default-on",
; ?) ~6 J7 _# X! W },* O! x- x# p* [" r9 p1 J' r
};
6 F. W: [$ i- M1 S2 Z, A9 ~/ K* M! J" N* L. M" j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 s3 H9 e. X( w% h1 p2 J7 a
.leds = da850_evm_tl_leds,
: Y0 r5 M; F+ _9 N. t+ j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) j* K9 P" d) u& n0 v};9 P9 c+ N$ I& p) z5 \% ?
2 W! E1 ?% }: _# k* S( U/ Y2 s4 e
static void led_dev_release(struct device *dev)$ I# X5 F6 ^: o- _& m
{
& G3 ~- d/ t5 z0 j$ n3 F5 }9 g};
$ U) T2 x1 u! q6 J) a" e8 t5 U
static struct platform_device da850_evm_tl_leds_device = {
% h& r. g% k& `. b% x$ w& R2 z3 L" L .name = "leds-gpio",1 o& F3 Q4 S* w! r3 a" h6 p
.id = 1,
@* P( L5 C0 {" ?$ ] .dev = {' r( S+ K" y+ n# k" ~: a d2 j6 ^
.platform_data = &da850_evm_tl_leds_pdata,
) K, _* k: H( x .release = led_dev_release,
1 U! g; j/ Z/ ^6 G7 m( b }. c% Y( D6 p7 z/ Z1 n
};, W" y6 s! }9 `8 {
& O% @3 z: n7 }# Y" T# W3 w' k
static int __init led_platform_init(void)0 w& f) d7 Q! J* H' L* `, M/ h. @5 M
{
! `, B( o M* `4 Y0 q int ret;
5 G+ _: l2 k# V/ H#if 0
) _, i/ e& O$ j6 s3 X$ j( u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 Z. p V! I" C, E/ | if (ret)
# ~7 r" w6 @# s pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 X6 H" s" {( w" w2 R: y
"%d\n", ret);
2 K% h6 k* B. C#endif7 D5 @! j/ z" `1 `8 F; Q* W
ret = platform_device_register(&da850_evm_tl_leds_device);
8 \: \/ E( n' L/ g# k1 P if (ret)
& U& t/ e+ q' {& M pr_warning("Could not register som GPIO expander LEDS");
5 t; h! L8 }% R0 J1 d else: j" @% r4 v) ?: V
printk(KERN_INFO "LED register sucessful!\n");
, C9 h% O( A) U$ e& T& V N b1 h, E. @2 L# Z" z
return ret;1 T( s: H2 G( f
}
$ M9 Z. _. r: o( P2 t* ~& K( N5 H4 o2 M* v8 ~3 V D! I
static void __exit led_platform_exit(void)
. @! A/ Z! ?- K* W# A' r{
" Q. ?8 e+ [/ _# Q- Y platform_device_unregister(&da850_evm_tl_leds_device);
. \$ t1 E5 v+ L4 Y% @8 g; m5 ]" _- e' [4 R1 j# o9 _: l
printk(KERN_INFO "LED unregister!\n");) \" O7 L3 @5 K) b) D" S
}
0 r4 Y; `' Q* j( v! l V/ z
' ?+ Z ^( F/ `5 I1 {9 A N( Y8 ]module_init(led_platform_init);7 f7 |; L3 P* K0 Z1 w
module_exit(led_platform_exit);
& D! o9 b7 `8 d7 v; |" d$ n
% d5 }$ x+ V2 G1 lMODULE_DESCRIPTION("Led platform driver");
' U* F8 G( o, j3 u3 JMODULE_AUTHOR("Tronlong");
2 n2 _* }8 S' w, l5 n' E+ WMODULE_LICENSE("GPL");4 D1 V1 l1 k% d
* K1 ?3 U. }; l+ C |
|