|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" H+ K# W% F% Z; }0 t6 F [#include <linux/init.h>: A- X! W9 J5 e; m# V+ X8 l
#include <linux/module.h>% B7 K6 N+ X9 ^: @: D/ `
#include <linux/kernel.h>- S& f; Z' X. l# @' P
#include <linux/types.h>
- F1 y# R! d) p. O#include <linux/gpio.h>& J s+ `9 q# x" _- D
#include <linux/leds.h>
/ h. u7 o7 K; b5 l( l+ W. G @' y#include <linux/platform_device.h>
, y/ p# \) v- p9 T$ z/ \% p
+ i. k. F; L6 k6 a. d7 b5 ]#include <asm/mach-types.h>; P1 f3 R- Y# M2 W5 ?7 n
#include <asm/mach/arch.h>
$ W6 @ R* q$ F1 k6 h! s9 j. B3 E#include <mach/da8xx.h>: S5 K8 ^# m, T8 |" h3 T- g! o
#include <mach/mux.h>) ^4 E$ N% L2 {$ D% a& g' W$ c
& T. P6 W- A& c9 B#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); L. R4 o4 R! l
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ G* ]* |$ u7 @2 v5 V) R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( a9 o# i- {* P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 g; E* i1 c; {2 p( o& a' z! v0 H \: z6 ^: W, `2 z! `# a# I
/* assign the tl som board LED-GPIOs*// N* v5 f% U! Z& o
static const short da850_evm_tl_user_led_pins[] = {
( T" E ]8 `# f: D* H( f /* These pins are definition at <mach/mux.h> file */2 h" |1 z6 z! Y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% B8 j( @2 I' [ -1
& {/ d( Y3 m8 V# ~% c0 c; p/ i};, D9 t9 U; p. o4 N, Y ]
# D, Z; \. D- l4 o/ n$ E7 b0 Q
static struct gpio_led da850_evm_tl_leds[] = {
! J2 w. V5 j1 V/ B. c: {% v {+ V' z# ~) }; A4 L
.active_low = 0,
' @0 S4 _+ _) q. U5 k) s1 n2 r .gpio = DA850_USER_LED0," a# w, i: V+ g6 \- U8 Q
.name = "user_led0",8 P9 K3 y6 O% I) j
.default_trigger = "default-on",3 E! D" w- n: ^# ~: z7 F
},
# X+ H( H$ k9 ~1 Y4 d- O {
2 ], e6 |% q, x' w& j2 d' c .active_low = 0,
, h0 u0 z( Y" P: V, d( ^ W .gpio = DA850_USER_LED1,
/ F8 b- d. E, U3 e .name = "user_led1",
2 s/ d+ {! s: }: R8 v .default_trigger = "default-on",: j. ?' H3 R" ~: J0 S) `" h
},
% e' \3 V( ^3 x8 G: _4 x/ } {* h9 s- F- `8 h% V7 P
.active_low = 0,
/ [' D" N/ y8 ]* Y% n0 n1 h .gpio = DA850_USER_LED2,% a) x" w& y8 z6 a
.name = "user_led2",( w) |0 [' F5 P! k* T& J8 s
.default_trigger = "default-on",( Q4 v6 ]$ K# ^% b% _
},
+ @5 |6 z5 [0 Q0 \; j) \- B1 R: y {- V: S& n$ Z& n2 P$ t8 }9 J% T3 d6 c
.active_low = 0,
( H: W: _ M7 U5 u& y .gpio = DA850_USER_LED3,
5 N# Z. d. w3 W* h .name = "user_led3",
# T! o* D9 v: h" H; ?7 @) U: e .default_trigger = "default-on",
/ S2 ^9 W1 [& J- o },
E. D. v* k7 [( Y# ^' ~};7 L' A, q" y. w( h" t4 D$ z& K
# {' M: _$ k0 ~$ f# istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! `6 ?* n9 n; y& d8 i .leds = da850_evm_tl_leds, R8 @1 Y! u$ @+ p7 ?2 K' M. g( x
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),! Y* n& s6 i" E# t
};0 d$ v; [/ I- z! @% t$ Y. \
% `8 T& R4 l% L% Z6 Q
static void led_dev_release(struct device *dev)
1 W i. K' H; J( \{
) m- a7 n, ~" Y4 N; M: O};: d. T/ A9 ]& e, f2 ~' C" N! _
; X+ D1 U& \: b& Q2 z# Astatic struct platform_device da850_evm_tl_leds_device = {
9 g! Z+ D \9 y8 W: _# B5 e .name = "leds-gpio",
1 f- k9 I C5 V, b N4 s .id = 1,
; N( b; Q) {6 i2 [: j2 c$ k .dev = {4 \) [% Q2 A: h; k
.platform_data = &da850_evm_tl_leds_pdata,
/ o. W8 m! @$ F1 W( A; x K .release = led_dev_release,
2 i3 `/ _5 _5 R1 H! V }
- y' E: y1 b. r6 ~8 X};
) {- N* K! v! m+ t$ W& m# U8 t
static int __init led_platform_init(void)
6 w2 h3 Y) z0 t5 U( Z1 W8 r# T+ ~{( u! e# K* N/ K' B9 I9 V7 k
int ret;
; n6 @1 y; T) y+ d! F! @#if 0# g3 s7 k0 {1 a9 S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 X& R9 L3 ]7 {! M; P" z+ y5 [ if (ret)6 r- S; a& z! ^' z. ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# B' O! g- U8 H/ M* J "%d\n", ret);
0 o* C; W+ U2 ?$ i6 j#endif7 p+ \& q+ c$ y+ w# L
ret = platform_device_register(&da850_evm_tl_leds_device);
t3 Q% K4 J5 W- |+ x" q if (ret)2 ~* s; y4 {3 v3 q( _# b& P3 }6 F% p, a
pr_warning("Could not register som GPIO expander LEDS");/ W( s& @2 G2 {3 J: q/ e
else
2 n4 E) w8 ~3 f, x% s4 g printk(KERN_INFO "LED register sucessful!\n");
6 q# H6 e k q
2 d6 y+ X* N+ b* N7 [ return ret;
/ z/ T1 N# r! I2 b% G/ ]}& b! C$ ^, j" T# A e
% ?. n. a6 e% _- S5 h
static void __exit led_platform_exit(void)
* R: V G# K1 j{6 y' |- w* z7 T
platform_device_unregister(&da850_evm_tl_leds_device);9 X k1 _0 [' d( O& [: Z! o# }7 l
* j* j$ q$ y3 u" b( t
printk(KERN_INFO "LED unregister!\n");
5 \% L" o5 V& t& c$ k* U}& r0 F H' @7 A- \5 d* h
0 T1 ^$ q0 u' L) ~1 O
module_init(led_platform_init);; Y- M) k) o2 }/ v6 ^
module_exit(led_platform_exit);0 q/ s8 X% M9 p0 D! s3 W% _# m% p) r
# h( l* J- W% o/ f7 @* u+ n" F! M
MODULE_DESCRIPTION("Led platform driver");! j- t* j( X6 r6 {6 i
MODULE_AUTHOR("Tronlong");4 }* P6 ^1 ~0 c2 C! F/ ^! h' g. a
MODULE_LICENSE("GPL");
* R3 B2 X3 o2 x1 Y" p G* t V( k. N& S1 ?
|
|