|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 H w" r7 e% z |; k, ?) o) i
#include <linux/init.h>8 [& @- X, |" ^' R% \, b
#include <linux/module.h>
% ~' `, F2 _5 n- v/ |#include <linux/kernel.h>: f9 @/ I- z7 }* i- j" }
#include <linux/types.h>/ p) K0 e1 j/ i6 x
#include <linux/gpio.h>4 J/ N1 J: ?2 ` N( F
#include <linux/leds.h>
5 P9 i) s/ t2 R/ Y#include <linux/platform_device.h>
) T* m6 n& v9 x5 h* T& V4 Z
- n; {/ _( T! x5 n#include <asm/mach-types.h>
+ Z) ~5 n' ]& k* a2 R+ ]9 u% v#include <asm/mach/arch.h>
. M( V" E" R1 Q4 B! M#include <mach/da8xx.h>: a# N& U, W! X8 A
#include <mach/mux.h>7 [2 ]4 d3 M3 p% O
! m6 t, _$ o- \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 l E/ L) {' L#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). Y H( l8 Y* S
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( ^+ k6 l! }7 _$ I#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" S. [! t$ ^% V q' [, \+ i3 [
8 ^, S; |- \9 z/* assign the tl som board LED-GPIOs*/& x8 [0 a" v+ M/ M, w" B4 x
static const short da850_evm_tl_user_led_pins[] = { e5 e2 e& ?- F5 ~/ \- C8 J5 m1 U
/* These pins are definition at <mach/mux.h> file */) y) V [) S5 K& X5 I/ G" E
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( t5 s' g; X1 D: Z$ i -1
Z4 u9 n# ~' Y! k};
U4 O. W0 h. H ~2 ~6 q
; r9 ? J1 I P- c9 G- c" Pstatic struct gpio_led da850_evm_tl_leds[] = {# }1 s# B. d' `# E2 ^" x
{+ i" v4 |+ Z2 {8 S& s9 a
.active_low = 0,
$ |, [+ Z5 L+ t# T' ]+ m4 { .gpio = DA850_USER_LED0,' D/ R! W; | o: l, V
.name = "user_led0",
, p5 Z- n P6 M% ?0 u+ S7 T% q .default_trigger = "default-on",: U% z; k% R2 [, E
},
3 i8 _/ L* n8 }2 {$ J* a+ W {. s- p+ y( w) j- N* X
.active_low = 0,
3 _- J# {2 I+ \$ [ F/ V9 p .gpio = DA850_USER_LED1,
8 t4 T b) y; I N7 x" h2 T .name = "user_led1",
: Q6 N: d4 `- M- k% h6 q2 \' @ .default_trigger = "default-on",
2 e. ?& `2 w( o x9 ~6 K },
- {/ Y& d7 L& s" g1 j {
. o, I2 B: F I3 } .active_low = 0,
- Y% o. ~" L! d- m2 h g) R .gpio = DA850_USER_LED2,4 X8 \1 h. ?1 o# a( q: C& t0 y
.name = "user_led2",- u5 S' O7 v5 y% s: `
.default_trigger = "default-on",
0 n5 r$ U; b$ T+ e: t5 X/ y8 m },9 m4 B3 G! [: P" j
{! v, v$ t! D) t6 v
.active_low = 0,) \7 M/ `6 E8 {" c* _( m
.gpio = DA850_USER_LED3,7 e H! f+ e7 v
.name = "user_led3",
8 P' [) o5 z7 {: {5 w; u .default_trigger = "default-on",: I& f" x; x; y! D$ H) V9 M
},
3 X: C- B B3 w, w- y- S, v};, ^; {/ P$ a6 t
5 Y( J& R9 t2 Q4 \: \/ l4 z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. S* `5 E- C( {4 ?5 J8 k .leds = da850_evm_tl_leds,
* f; P3 h1 G3 r& P$ k) V9 c. `9 M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 l2 l) o- i2 z4 W};5 x4 h/ r! ^- D
! E% p* f0 f* n2 c1 A6 a( Z% W
static void led_dev_release(struct device *dev)
# T) U0 r% ^% u _; S% T{
% Z- x) E0 ]( r7 B2 K! m& e; m3 t};1 v4 Z9 A) W, M( f( x# X8 m
/ p X2 P$ H: o5 w9 `) e
static struct platform_device da850_evm_tl_leds_device = {) L. ^1 ~( g! t4 j$ w3 U
.name = "leds-gpio",$ n1 m b* L z9 r, B0 T2 a3 z
.id = 1,/ B5 ]! x9 Y. d$ E/ |
.dev = {
D" d; q4 D6 Q; D2 ~ .platform_data = &da850_evm_tl_leds_pdata,
5 h& x" O. p) Z6 F2 y' A# v .release = led_dev_release,) t! E$ p! \0 H1 S: |/ J
}% o! H1 C$ V; f+ g. G
};8 f3 h; U" M8 n$ c7 u# b
7 l( o/ e2 B& Z/ i
static int __init led_platform_init(void)
, z' H3 V. Y# R% |{
% N, L. \5 p2 N; w/ m6 H# O int ret;
- J( r5 H, q. ]! O1 n$ `8 W ]#if 0
' T8 \4 w6 z6 i, q3 H } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 j% l, w: j/ l$ _. s if (ret)
. c& T, W3 A) k r" d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* G, d, a; @+ C/ y- b( E "%d\n", ret);
/ f1 l& o8 Y; X% V2 A7 ^#endif
$ m" I/ \, w, u4 u9 e" T ret = platform_device_register(&da850_evm_tl_leds_device);
3 ?6 P: H- [7 _ if (ret)$ @# X6 m8 ]4 e$ @8 w0 f
pr_warning("Could not register som GPIO expander LEDS");. D; V. H; Y' [& O
else$ I3 T" O' x1 b7 w
printk(KERN_INFO "LED register sucessful!\n");2 m9 p& r& _( A3 G! m
, F p/ W2 {8 E& M& G u+ W& K
return ret;
! f1 |( M' g8 k! d}
8 U T. k$ d1 n: o; v6 b, z0 G, c- S. _* s
static void __exit led_platform_exit(void)
; g" C' p2 X% u5 G{
/ ~5 v# B4 Z2 {! H7 l' E. B9 U& d* Y platform_device_unregister(&da850_evm_tl_leds_device);
4 S6 F7 G: P2 G) ]" O
) ]( q' f7 D/ W# ?2 f, D7 R9 x printk(KERN_INFO "LED unregister!\n");
. m6 S6 ~# G0 x6 r2 O0 [}- x8 T2 U U- P. a' H0 Y% x9 \
: ?4 q E: i: O$ xmodule_init(led_platform_init);: s# m* v( y" l2 W# K, i: B) ]* A
module_exit(led_platform_exit);
, j, A& y0 [: @6 o3 g1 c1 J) H7 t3 D. [/ o3 M; @
MODULE_DESCRIPTION("Led platform driver");% k& w% a# t& O1 a" J. r1 B
MODULE_AUTHOR("Tronlong");
" A* q$ K5 O" eMODULE_LICENSE("GPL");1 Q! D8 S2 e5 [5 `1 {! i% t
8 W& e8 a. d+ n5 l/ ~7 q! i
|
|