|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) K1 k5 y& ]/ \+ C) L
#include <linux/init.h>
) U: W2 X* g3 v2 `#include <linux/module.h>0 V% D& N$ y9 y7 ?9 S5 c
#include <linux/kernel.h>$ e: ~) u( r+ W( O; L2 x
#include <linux/types.h>" z& f0 n; J5 g% ?9 O
#include <linux/gpio.h>
% f$ B7 M3 G% z#include <linux/leds.h>3 d2 Y0 K$ B. h+ K5 m' c. ?5 k) y
#include <linux/platform_device.h>
2 `% G; U; H' }" h) D
/ ^" s' P# v; c! ^#include <asm/mach-types.h>
+ H; C, f, x; W. R0 r1 S#include <asm/mach/arch.h>
" R5 z+ {6 y, ^4 f( c+ l: y# ~#include <mach/da8xx.h>* c- o1 ^, x# }, f+ m& X% O
#include <mach/mux.h>% y3 J2 L2 S* u: [
5 B/ g8 n9 U9 X, H#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 x- T+ K2 e( d7 ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* `1 f- v( t/ {0 \8 P, b1 Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) n4 r/ ?1 {4 w: _$ Z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 B! H+ Y8 F7 _7 `& r* {2 J1 z$ L7 q% x9 }1 d4 r" J
/* assign the tl som board LED-GPIOs*/
3 V4 W8 c8 M K# k/ zstatic const short da850_evm_tl_user_led_pins[] = {
( Z& s/ {& w; O1 u# o* g3 s /* These pins are definition at <mach/mux.h> file */ ]# q. T0 Z i( R/ v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, I7 i# A( G4 w+ b( q
-1
# m0 G0 ~4 @" c- V3 J5 |};7 [% w* A- v6 T" x
6 n$ i! ?! [& n; r3 P; U4 Jstatic struct gpio_led da850_evm_tl_leds[] = { J2 ~% v d4 [: V6 D! w
{
5 L+ d/ {) [' @ .active_low = 0,8 h* T8 O2 D6 k8 N& L' q
.gpio = DA850_USER_LED0,/ j. R2 ?( E4 O0 e) T
.name = "user_led0",
' [& w% {( G g+ V% ] {2 _ .default_trigger = "default-on"," Y) c" [" u1 M3 C
},0 V0 f8 r2 v9 ~5 ^7 _& r$ v
{
1 V6 m6 n& U4 v3 v6 T- T .active_low = 0,
9 E# M/ `- p. z4 \- g .gpio = DA850_USER_LED1,
s9 U5 Z/ i. i- h% O .name = "user_led1",% a& L) ?; k( q( s6 l
.default_trigger = "default-on",% X+ ~ _* [0 K# C4 c4 ~7 J2 @' V
},
! z8 T3 i2 o# v- Z/ z F; R" m {3 g5 U3 G& T! \2 Q
.active_low = 0,
3 n, b( T* x+ n3 o .gpio = DA850_USER_LED2,
* L9 V( m K# f: n .name = "user_led2",
# E+ }9 Z$ d* B% a* L .default_trigger = "default-on",
8 r# s y1 G# ?$ C- C$ B },* e( C& P5 M- R
{
! ]# F9 B6 `) X5 I9 o .active_low = 0,
* F' d) C3 c) p .gpio = DA850_USER_LED3,
( T! K, a1 Q5 L- A' ` .name = "user_led3",' A$ K. q' z1 d: h/ G
.default_trigger = "default-on",- Z) o$ _7 A5 H9 h( l% |/ j
},
& i6 h! K0 k' A- ^};
4 X, j4 q, e3 v+ q% ^. c) _9 N$ e: n/ H( k1 ]3 O5 v8 |. ^
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- X" f J# j. ?. ~2 {5 t9 l
.leds = da850_evm_tl_leds,1 s# o, T% ?- Q* A% |1 \2 \! ^8 I \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ m7 e9 }6 p+ P7 g
};/ F$ C: B, i+ L2 K+ E
& ?" m7 I# B5 `$ f0 x
static void led_dev_release(struct device *dev)
/ f/ S8 G/ U* N, B{% e' `8 u2 Q0 Y% O* C
};
$ E; e! \$ |9 n" X
1 Y& J- p- S1 |. S B: @static struct platform_device da850_evm_tl_leds_device = {1 c( [. X+ ~ N. W( Z+ ?
.name = "leds-gpio",
5 B: X& a2 s2 H! x .id = 1,
- Y* g5 Z; b$ b .dev = {' t( }) U/ G5 `( _: u
.platform_data = &da850_evm_tl_leds_pdata,
* _& \5 d* s, _( Q .release = led_dev_release," v0 t9 D0 |$ f- l% |" _% G3 B
}
3 M1 i% Y) L% l2 s& `};# {8 v( W e1 j
* g! y( Y$ E1 W: t8 V& q: Y. r6 ?
static int __init led_platform_init(void)
1 ?8 a0 X7 N- ? v+ H; L* ~{$ R) E m/ L" W$ L% }( U0 v1 {: Y
int ret;
, |+ l1 O: G- P#if 07 p8 H8 k4 B4 Y% E% ^! Y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 J' R4 B1 N2 Z3 D, |9 L
if (ret)( a* k& e( ]1 K O
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' C g0 Y: {* `$ y "%d\n", ret);0 W! b8 N A. f% m; K4 \
#endif
J" ^8 B! j6 U7 _9 ^5 z6 \ ret = platform_device_register(&da850_evm_tl_leds_device);* I/ W: _# C& M5 V8 u9 h1 \6 S
if (ret)
# K" N. ?* O7 C. A& |& e5 z* V- K9 V pr_warning("Could not register som GPIO expander LEDS");1 G) e% C& d# [1 @
else
1 c+ J% U$ f6 e3 m4 q' j printk(KERN_INFO "LED register sucessful!\n");/ ^4 W( q! J: `& A( \" }
' n. R6 W$ T" O" S6 a
return ret;9 q6 A6 ?$ W3 t9 m I" ~
}
% P+ ^( T& d! g! f7 P1 Q1 q8 l
% `: F( m1 l8 ^+ K: B+ G# @+ [static void __exit led_platform_exit(void)
) d% F- A- C' `3 [{
, w0 w0 ^5 w6 v4 u& G- f platform_device_unregister(&da850_evm_tl_leds_device);
& X7 P* _0 P4 ^4 O
1 Z- [" n5 O, M$ p1 P printk(KERN_INFO "LED unregister!\n");9 m! A. E4 O4 b; \% J
}
7 ^9 _5 ^8 H @2 o' j+ p, J% J" c' w k5 I0 F
module_init(led_platform_init);
$ t6 C k( r& \! F) _3 V; }module_exit(led_platform_exit);0 z; F3 ?" j& \$ l3 Q* F& j
5 B M% T! Q3 E- b8 J( S# a
MODULE_DESCRIPTION("Led platform driver");9 w- q; g5 G7 n" f i! J% h
MODULE_AUTHOR("Tronlong");9 t4 X2 _# |9 ^
MODULE_LICENSE("GPL");
2 P! b5 p9 G9 O( J9 ]! ~' z5 u* b$ w, I" t4 L( D
|
|