|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. p5 W" q ^4 E$ Z. I1 j
#include <linux/init.h>
1 i' j3 d0 m D8 \' e- S& N#include <linux/module.h>
, h5 J0 K- ^/ O1 L#include <linux/kernel.h>* p) E# {) n4 O* u: O6 _4 `0 _
#include <linux/types.h>, c. r: B, [$ x( l! [
#include <linux/gpio.h>2 k) d0 d# B5 g1 J
#include <linux/leds.h>
2 l G v% w" W- _) q* o#include <linux/platform_device.h>/ g' `7 B5 \6 P2 l5 \% C
/ h1 N, J1 d+ w7 o
#include <asm/mach-types.h>" K; A( B; v* V r# D
#include <asm/mach/arch.h>1 N. X/ L: v' X* D) `# V
#include <mach/da8xx.h>- u" L: Y u% A) u
#include <mach/mux.h>
3 g$ @. O. \8 w. @5 C
$ n. c6 e1 K% y. G#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). Y- A7 [5 o) i, q% n
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ S6 [& l2 G# S* I ~
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ } K2 `3 E1 r8 r9 n% |1 ^6 E2 \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" |) m4 G2 m8 |- D5 p2 |
% ^# t0 Y @, M, H( K/* assign the tl som board LED-GPIOs*/
# b' |* A+ E( Nstatic const short da850_evm_tl_user_led_pins[] = {0 I& Q+ | J& H) h
/* These pins are definition at <mach/mux.h> file */0 q! [* l/ Z4 ]* C6 v8 L, J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ A5 @( |, I( L) X5 h
-1
- P6 ^$ b: [4 E& [) T+ S9 a) Q};
- C* M5 n: K. Z' ~% ^2 J/ `0 F ^1 }( y; U! [6 L: @* K
static struct gpio_led da850_evm_tl_leds[] = {
/ q5 L5 ^7 B, U* A/ f {
* }5 I: b8 K/ c& J" O .active_low = 0,
' [9 D) v4 ^% [1 s9 r8 r7 P .gpio = DA850_USER_LED0,; G- p% l: i3 }8 u+ g( L
.name = "user_led0",5 K D5 B* m1 s X# ?0 }
.default_trigger = "default-on",0 R$ ?, |3 j* T3 ]/ G2 M" f6 b
},
) M. r2 V$ S5 @6 a6 s6 l {
) c4 V; `& x( L .active_low = 0,( a8 q2 `7 ?/ r& [: i: P7 o
.gpio = DA850_USER_LED1,+ L+ @ A' u1 R
.name = "user_led1",
( D" O* W! ~/ q0 \ .default_trigger = "default-on",) |2 T( [% U" g9 Z7 O, X1 C
},: n7 n, B9 Q P. h! m; y
{
0 C3 R- Q! N4 I+ m# F9 m( x$ n& S4 R: N .active_low = 0,+ S5 l% w# y6 j3 W
.gpio = DA850_USER_LED2,
* D. |' D9 X) ]8 F+ h .name = "user_led2",- p9 m8 P7 c' _+ m% b, l
.default_trigger = "default-on",
3 d( x0 @ ]* M* ^) p },
7 {0 n* Y" w" ^9 X: C( O b {
. D" G7 ]+ ~- v2 c .active_low = 0,
% K# p! c! Y+ n# R \5 G; V .gpio = DA850_USER_LED3,$ `& x1 m* @1 j
.name = "user_led3",$ M* _! |# A; [2 s$ Y1 ^' M
.default_trigger = "default-on",
6 W& @8 u8 l' H& o/ {. J1 k: s },
5 c- C( {7 N. Y( W: f* `};
* f. p: f' M6 h) u3 ~9 ^* G2 |3 z# j$ E1 _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( D6 [/ ]1 c, f
.leds = da850_evm_tl_leds,
( {+ l/ u6 m0 |3 R$ O: T8 g .num_leds = ARRAY_SIZE(da850_evm_tl_leds),& i, o3 ?0 d B3 e: |' m" f
};
# W2 ^+ T* w% h; x5 _9 F0 a9 M7 ^' K$ H# ]) u
static void led_dev_release(struct device *dev) j1 _1 ^! z6 R9 y z& g1 h
{
% {% f$ L/ q& u/ m+ W};
& W& M8 b8 D2 t( K9 C3 y* ^0 P% N# I
static struct platform_device da850_evm_tl_leds_device = {' o' l7 C: q& d! P, j3 F4 Y
.name = "leds-gpio",
4 N: T+ B. w) L1 x3 `7 d0 ^ .id = 1,
. }3 V& Z" }/ _0 k .dev = {
4 C. t! K* j4 g+ b. C( G! Z: M .platform_data = &da850_evm_tl_leds_pdata,& e) R/ ^8 G) c& v
.release = led_dev_release,
* j1 `( K9 w- v( o2 e9 V" [# i4 d( B }
! H6 ?' o: U4 {5 c6 R};$ k4 e3 H+ ~" n8 K. C0 z
: c- w2 V2 {+ v+ }8 n, s- Q+ U3 Astatic int __init led_platform_init(void)
: z$ _* R# ^: B# j* j- ^. r{0 j+ ^2 ~6 h1 ?0 B
int ret;$ i# k% d7 v: V: Q
#if 09 l7 r% q) M, b+ P; F
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, U$ }' M% I3 ~. v) _ if (ret)
x# }4 }# ~/ r+ N% \ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ g# t Z; k5 b. Y
"%d\n", ret);
8 a% K, p; h) _* z#endif
8 L" E! S' D& e' i' _ ret = platform_device_register(&da850_evm_tl_leds_device);
5 v1 }& j! e' ~, x8 K/ l if (ret); g2 v3 l& I `' [. a) x
pr_warning("Could not register som GPIO expander LEDS");1 N; ? |$ S9 _: w6 ?$ L( j
else: y, J' z+ k" s# ], I& c
printk(KERN_INFO "LED register sucessful!\n");
" Z4 u) c+ j6 u2 d9 G% P9 O+ A. d% s6 {( ^! _3 \
return ret;
8 M8 N4 Q( A- ^+ q$ `# p8 i" {}1 P( ^# G4 O- f& R1 |
C0 X) p' j! r8 H. rstatic void __exit led_platform_exit(void)4 `' I: {, o. m8 r: t; g) b
{, P: E6 K" @# O$ {
platform_device_unregister(&da850_evm_tl_leds_device);
( ?4 U1 ], d3 c3 E& B) @$ d& V) K- o! t
printk(KERN_INFO "LED unregister!\n");8 D& ]) L; v' f( p+ f: \8 _, v5 J" X
}
) \9 S; t: i; F9 ]6 I* n$ c0 @' v- o$ u% W
module_init(led_platform_init);
! n i7 [/ w1 \+ d$ Qmodule_exit(led_platform_exit);9 p; ]) A. c! `+ X w: m$ p
# k6 y5 T- Q; O5 ?4 J: \MODULE_DESCRIPTION("Led platform driver");' E; H+ l/ d: } H
MODULE_AUTHOR("Tronlong");& d8 g( G( H# Y1 s% b
MODULE_LICENSE("GPL");
: I4 ]% U) G( o& D
: o2 L7 D; }' M! p0 n4 C+ h+ w& K |
|