|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 D6 F, V8 ~% {) x. U2 W#include <linux/init.h>
- a) J1 s2 [- z# N$ |/ n#include <linux/module.h>/ f7 M6 g; [$ G4 }& I8 D! W, b
#include <linux/kernel.h>. C2 g& M7 A& K" {6 U0 O
#include <linux/types.h>1 }: ^/ i7 @' q8 o
#include <linux/gpio.h>
4 R2 U2 [3 c( W& I5 h5 X1 k#include <linux/leds.h>* N+ M1 A( q% o# C' v. C
#include <linux/platform_device.h>
! ~# f; X8 x% K3 u$ P- I
4 l( o, i s9 R3 c#include <asm/mach-types.h>
$ I1 H5 O- o7 n#include <asm/mach/arch.h>; S) B8 K! F* X( [
#include <mach/da8xx.h>: ~# x- N+ ?# p
#include <mach/mux.h>
# H# Y, ?" w7 \. ^- {2 Q/ R( ~. {& K% z% G
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ M+ P" P& \% T4 h* ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ Z7 F. E1 J# h4 f# e/ S* t% H
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' U9 `" T; d3 O$ B7 C
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( O. q) v; O H" P x
# [) ]$ w4 w$ p: ?, i. J
/* assign the tl som board LED-GPIOs*/
, B4 N. L- A" K o$ m. g) Ystatic const short da850_evm_tl_user_led_pins[] = {
' L$ y% u7 Z- g9 v /* These pins are definition at <mach/mux.h> file */) W) a. k: J1 G) [) k: m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: e: e' E6 s0 o; o0 c l -1
6 V/ u* K8 j4 d};
. [7 J/ d$ n+ k. \3 e c, A3 {
; A& e2 d H. I \static struct gpio_led da850_evm_tl_leds[] = {
: I$ G4 T# P) V% ` {- b+ h0 _- T3 ]5 |+ b: D' I. _
.active_low = 0,( t: |$ O; x% ^+ L- o9 G
.gpio = DA850_USER_LED0,
" [; v: R P7 g1 o1 G$ a .name = "user_led0",0 ^1 B' Z+ X! v# [) ^5 k
.default_trigger = "default-on",
; ?3 p* d# m4 `2 i& i },
: u2 a( C* M$ m0 c {
% |6 O7 H5 D4 }7 r/ Y .active_low = 0,
, U) D% J+ M% D- W .gpio = DA850_USER_LED1,
5 ]' f9 @0 M! s8 h% I5 f, ] .name = "user_led1",5 b# a& k5 N3 p) o0 z
.default_trigger = "default-on",6 ~0 y+ `- X. A8 C" A6 Q
},9 A; b6 w' z2 q/ Q2 e
{
( o3 H: M: y1 o# ]" X) N .active_low = 0,
# ?, k' t X% H4 V# a0 ^* d .gpio = DA850_USER_LED2,' J) J2 n0 l' P6 }& X3 p
.name = "user_led2",
/ U, Y. [/ B1 P9 B/ l .default_trigger = "default-on",
4 E1 K d5 C# }! H* T( @+ D },
. ]4 Y/ R, L7 x9 `$ D8 f {
# U) m E6 G4 V: V2 I8 m a- V .active_low = 0,
3 p8 t* Q$ M) d& H" f7 ^5 B6 U .gpio = DA850_USER_LED3,
7 M" d* Y& B$ Q .name = "user_led3",9 s' c) Q% p9 N6 }( k. Z
.default_trigger = "default-on",* t, l( y. _" f- Y/ R1 N2 y
},
0 U# C3 O+ L- i! L};/ k, H9 e' d L, W! S: Z4 c
P4 f6 Z9 l6 _static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- u2 k1 e% _3 w4 d9 J# n) w3 y
.leds = da850_evm_tl_leds,+ _& L( T+ e( \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 H" @4 U+ s* Z1 \$ h};
& h i# v$ N4 c6 Q7 r
" v, X! f# A) Y9 O% Estatic void led_dev_release(struct device *dev)
/ x+ ]2 t" n# e: I# e( R" c{
5 P$ m2 P: }# e: ]1 P' X. _};+ w: t/ F: @5 M0 I7 @9 l, U# |& U
0 l9 w0 |1 }1 J2 Estatic struct platform_device da850_evm_tl_leds_device = {5 @, O* k: b# O: u1 p
.name = "leds-gpio",+ o K0 L0 t8 `9 d- x2 t* W
.id = 1,2 `* o& S# Y' P! X: G: e6 a
.dev = {* e" i9 {. Z& a
.platform_data = &da850_evm_tl_leds_pdata,2 i: M" H* C! T9 M
.release = led_dev_release,* m4 [5 Z& N) H: D+ ]) ^& _
}
- H7 o4 j4 P& f j s};
6 Q4 N. C" ?" n& K; y/ s
4 t4 p7 R8 I5 D: H H3 `5 d+ w/ B \static int __init led_platform_init(void)
( K6 U, m' u5 W' D& H* u3 m1 a3 Y{/ l" d( M+ w3 }2 `
int ret; V3 `+ ^) B. R5 a a
#if 0. Q8 ~. p3 Y$ a! B. s% b
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 x4 G+ ]* z( `: L if (ret)/ n8 } n9 f! i9 h+ M7 |2 k4 x
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( B+ g; I6 }- R# i
"%d\n", ret);2 Q" b2 w5 [6 d; Z$ S: P
#endif
8 k. j! p, q, o! p ret = platform_device_register(&da850_evm_tl_leds_device);
; b7 z, |: Y7 Y if (ret)$ h( E+ o" S! k8 q- P# _- \
pr_warning("Could not register som GPIO expander LEDS");( n# ]0 g" J' y; K5 {
else/ R! a9 M9 x2 x
printk(KERN_INFO "LED register sucessful!\n");: R. E( X! c; a f7 h/ ~+ R1 D
0 i2 h: ^: e8 I4 l return ret;5 K1 f* V: B6 ~. b" Y: v
}
2 Y) I- T3 B1 z+ y7 ]' R6 T( S% R6 y; g# V
static void __exit led_platform_exit(void)1 _# v8 q }) {/ _$ U W
{& r" v( x$ F+ b" K' d- l; q
platform_device_unregister(&da850_evm_tl_leds_device);( f& J2 E+ h: T
- y; }$ b8 x; q2 g) C% ]/ ?0 `, u printk(KERN_INFO "LED unregister!\n");
/ V% J' i* v% A7 j; {& {}0 e' I1 I- T2 I) a8 _+ X
4 L3 Y2 w1 V6 J
module_init(led_platform_init);: h w2 j# m$ u
module_exit(led_platform_exit);! D$ Q% w" f: z! l$ d2 o E. x' R3 j1 M
, f x: v/ l% Y( w3 q
MODULE_DESCRIPTION("Led platform driver");
/ \" v2 Y. \. p8 [3 E7 JMODULE_AUTHOR("Tronlong");, F1 r( ]/ f$ m7 z, O3 Z- v0 `
MODULE_LICENSE("GPL");
$ s; f9 v! ?% D7 @8 O% J0 S& ^7 y
|
|