|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) b! U# Z9 p( c0 U, U$ ~% \
#include <linux/init.h>
9 K: k H' c5 A/ |( n#include <linux/module.h>0 C/ y, F/ R! E' L
#include <linux/kernel.h>
( v0 u3 Q: L, O. m, w( v$ h i#include <linux/types.h>9 a- q. Z) w) n% Y
#include <linux/gpio.h>
8 X( a U, }+ g+ r/ [ o#include <linux/leds.h>1 a. }& c: v+ B& h4 A
#include <linux/platform_device.h>
: A5 Q P. d# o: O
8 A& q- t8 i4 n8 e3 P+ [8 [' v0 O#include <asm/mach-types.h>% n9 I, ?2 X6 n8 N! ^( I, K* K
#include <asm/mach/arch.h>; }7 U# D- ~' x8 x
#include <mach/da8xx.h>- F6 b4 U! J: q# @3 |$ T7 k4 j
#include <mach/mux.h>+ P0 z0 P: c, v! l$ M2 c
; h, V& @& x& U#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): K+ w/ o) }" e9 |; H" l( k
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 h9 y9 j4 O. \( d3 u* }7 x9 t0 w
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 u' A1 q0 j1 E- g; k) S2 _; @5 }#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, k' Y Q, f* `2 C A" K0 m H. U; Q- [
/* assign the tl som board LED-GPIOs*/
% r X8 e# D5 ?0 B" J% B: ? ostatic const short da850_evm_tl_user_led_pins[] = {' b; _* I# K3 U; X) H
/* These pins are definition at <mach/mux.h> file */
2 S. G+ }0 Z: T: @ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. G9 b; p0 E5 q& u
-19 i; g/ a( y- B# I/ g$ {5 l) d
};3 M! d- A' M5 S0 D- }
. i' x" |- K1 Xstatic struct gpio_led da850_evm_tl_leds[] = {
+ u' @# c" _$ B/ \# B/ ? {2 t1 M9 m& ^+ T+ ^. q' T+ S
.active_low = 0,
, c& X; z$ E7 C* i6 J; [ .gpio = DA850_USER_LED0, X4 d$ X% q+ e' a( d* @. n
.name = "user_led0",
8 q/ _' |2 n- b& M9 g. N6 r* Z .default_trigger = "default-on",* j2 G, O' V9 O# S1 W
},
: l2 W7 J8 K; x& Z, i t% t {, A% U' n2 Z& R
.active_low = 0,
8 Q5 E) l( R& i! ]0 u( E) X .gpio = DA850_USER_LED1, H3 R+ E" X7 Y* X: q- U' t$ D
.name = "user_led1",
0 G0 @0 x r4 E* j' J, q: k .default_trigger = "default-on",
7 z0 I6 c" S% e+ o. }; P; L },' |! Y! L. E0 s
{
; F& P0 U. M4 I( n .active_low = 0,0 x& M) w8 P, A6 z2 \7 J
.gpio = DA850_USER_LED2,
- d# Z* G: l5 ?# k/ @ .name = "user_led2",
$ f# a9 b6 J8 Q: R# Q .default_trigger = "default-on",3 q; Y! ~( P6 d7 c. u8 [3 i! x
},
6 K+ ^+ p0 B( d" B! `6 P {1 n; X, N/ m9 b/ q, d' I
.active_low = 0,3 a) N0 |* @, q
.gpio = DA850_USER_LED3,
t% D: q0 g4 f .name = "user_led3",8 B. Y: O/ ?* w, o7 T. v4 x, v% F _6 x8 M
.default_trigger = "default-on",+ }( J/ g# _8 u" l
},
, C- b7 K9 f, x+ d};
4 ^6 P1 x4 i# |9 t: [# O! A% ]4 C& @" j( X* f+ t
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 ~; e4 U* W1 W4 M5 y0 z) k# T
.leds = da850_evm_tl_leds,
1 }% w0 }# W5 [: @0 A .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 B1 @/ ^5 ?* S. n0 w1 }}; G T, Z8 \7 x" P) e
c; Z$ L) Z0 X" w
static void led_dev_release(struct device *dev)# R' t, A0 l) o- h
{& c; Q( g( o. i2 B; r
};
# l# {- I- k# K: E8 l
& ^- w, `0 S) G6 `4 l4 kstatic struct platform_device da850_evm_tl_leds_device = {! m& J0 r1 o! G* I. y- A* N
.name = "leds-gpio",
) @+ Y" F( i+ R- d% z9 B" Q .id = 1,2 B/ {* c" ^ p5 U& Z& D/ S
.dev = {& i4 o; Y5 p, D, y" S4 s% _/ c
.platform_data = &da850_evm_tl_leds_pdata,
6 K2 g' Y0 z6 ]8 y+ R, e .release = led_dev_release,, [. H2 C1 k! c& `. f
}3 S/ H4 B) T) j1 C6 [
};
1 Q8 Y5 i, L2 i
* n1 l! ~7 M* s( N+ X9 Gstatic int __init led_platform_init(void)
: x1 X7 p* |8 {4 {9 X! A7 o' x{
& `( a% L. {5 b7 X1 s/ l1 g$ G" z int ret;
6 M* @. d9 A- W+ O#if 0, Z+ o" Q) e$ f, F; h4 i
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 c# g, m# {- ~5 B( B' f
if (ret) R( L1 h9 k' T i% x+ m0 h# O
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- Z) v/ r1 W7 m+ Y
"%d\n", ret);
# q% A& Y4 Y3 ~/ B' @* }. a#endif
! N N0 c; C9 V) B$ I5 ] ret = platform_device_register(&da850_evm_tl_leds_device);% L" T4 ?% _$ f6 @) ~- v
if (ret). x4 F( ?0 F8 n
pr_warning("Could not register som GPIO expander LEDS");
: c: m! t, L% l8 ~8 r2 I' A else! X5 V# Q4 @+ |5 P* n5 V
printk(KERN_INFO "LED register sucessful!\n");
' `6 R3 H* d5 T$ r6 W* p' l# B1 _. n" H# C7 v, ]
return ret;7 O o5 h+ |- ?' V
}
2 e. X3 v+ G7 j' T+ h/ p+ ?3 q: X- g# g% T& m1 g- n
static void __exit led_platform_exit(void)! z/ \4 A) j6 Y
{
" e, Y+ A' b. | platform_device_unregister(&da850_evm_tl_leds_device);
5 y' m/ U7 {$ ]$ I2 E: S X( w6 t% ~
printk(KERN_INFO "LED unregister!\n");
. P' ]5 @' H Z7 L9 j! l i}1 h/ @/ T' Q N8 X
+ }* V2 m8 T m. B5 J4 [; }
module_init(led_platform_init);
, D3 X5 h) m4 y7 cmodule_exit(led_platform_exit);
) }# L' a; b2 V5 \# O
4 [) S6 O/ g: p: {+ xMODULE_DESCRIPTION("Led platform driver");
" S, O& d |+ l. D8 TMODULE_AUTHOR("Tronlong");
! g0 P4 m: X" s9 Q$ vMODULE_LICENSE("GPL");
/ t1 J+ `2 f) A& w+ J! Y9 w/ }, g# n/ V
|
|