|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) G( K- j) R% U v. w
#include <linux/init.h>
+ v# l6 a- W5 A. R#include <linux/module.h>- y2 }9 Y: `5 A* ?$ H
#include <linux/kernel.h>
* ~! C# X$ a1 k" s% a( t#include <linux/types.h>
- z2 g6 T; Y# K" I9 P T% `0 w#include <linux/gpio.h>
5 v, V6 \: ^1 n5 K0 l#include <linux/leds.h>
+ \! l: P4 J( ?9 ^" s. M- i#include <linux/platform_device.h>1 n8 O4 n$ F9 J' V& J n% d
- B4 w0 T8 B* i7 Z/ ^#include <asm/mach-types.h>
2 o. l# k- A( O: u6 P* c# f3 k#include <asm/mach/arch.h>4 U* l+ v' ~' P- l
#include <mach/da8xx.h>
0 [( p7 t( b9 r+ b#include <mach/mux.h>
4 a' ?( c" \+ R6 n! V
- o6 Z3 M+ x) i; r6 F! p#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 J2 ^5 p) }9 o, _' W f/ J#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 g* M& }% m$ |0 d+ T
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 l% o0 c8 c+ L- F
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 y8 @$ L! U% g% I& [6 Q% F( n% o+ r/ C- U& n R* L
/* assign the tl som board LED-GPIOs*/( y$ I" v( h: K
static const short da850_evm_tl_user_led_pins[] = {
3 A3 K6 G+ j# |: v! |# S/ Y( _ /* These pins are definition at <mach/mux.h> file */
! s& Q8 [3 |. d4 F DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' ]( m' p; ]- [' t1 i: r, W
-1) l) x( w% O, Q6 Z) P8 G
};5 f5 k$ `/ r3 z1 w/ h9 g
6 h! z, G! ?# ^& z' C! O# ]: _5 ~static struct gpio_led da850_evm_tl_leds[] = {; P& d3 D. \8 k7 d; p4 {
{, _. I7 K. ]9 o: k. v- [
.active_low = 0,
$ s H u7 E. R1 ? .gpio = DA850_USER_LED0,
( \/ j2 Q4 W" g .name = "user_led0",: @0 K7 ^ S! Z; ]% c! y! B
.default_trigger = "default-on",3 V& B$ s) X2 ~6 {$ Q; j3 U( o. w
},
7 ~. s1 _7 G3 ?" X {. X# z2 Z) }9 ?4 H3 {( a# j0 O
.active_low = 0,
N8 E; C' m2 x+ I1 o3 _8 T8 { .gpio = DA850_USER_LED1,
% o" ^( L5 O% p: j7 w4 h .name = "user_led1"," Q) d" ^2 S( A
.default_trigger = "default-on",/ O1 D, q) n0 a1 Q- F, u# u
},
4 U: i1 y( K$ H4 l- U; o( O ?! y" _ {" i, A0 V0 T! E! C1 n6 ?
.active_low = 0,
$ @+ e" b! O6 o6 X .gpio = DA850_USER_LED2,
. D+ y- B! i" e% h .name = "user_led2",
& H5 m6 k2 A4 D9 v, U .default_trigger = "default-on",8 S# A0 a0 ]' j
},6 ?5 }; p7 q$ ^/ Q+ h
{% K4 ?+ e6 E. ]) B2 c" l. Y
.active_low = 0,
( m* R9 W6 V, K' A; F- ~% O .gpio = DA850_USER_LED3,
" ~- U* G$ f: @( t5 M* k .name = "user_led3",
% p' Y! y5 \2 W0 E! B .default_trigger = "default-on",0 z" y& x/ f6 m8 F& A7 p5 X, a
},* v/ g# H( g. d& o
};5 K( d9 |8 y" q2 R$ C9 Y
. T! F9 g9 Q: F) @9 Jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- Q t2 W. {2 D* ^1 H2 f .leds = da850_evm_tl_leds,! G$ o) V: E6 c( m& G
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),) ~& E: ^: n0 ^, [! n0 o
};
5 M8 T: x. I; O% Y1 e) h$ K1 U' _& v
static void led_dev_release(struct device *dev)+ ?7 p' _% U/ \" V$ a7 I
{
! w, J, q% t% g) x};
! I y" k7 t4 v( W7 f' E
9 F8 L5 [" k9 j) ~static struct platform_device da850_evm_tl_leds_device = {
1 C& @# ]! }: e0 H# e .name = "leds-gpio",5 j; \. u+ M+ H1 L3 u; m
.id = 1,
8 a0 w4 V, t- z .dev = {
& k2 q: I4 b5 O# b% o .platform_data = &da850_evm_tl_leds_pdata,3 A; Y8 J5 n1 C; k- Y) r. w
.release = led_dev_release,
" o% c! B9 x- l* [" P+ W$ {7 |/ P% g }4 \: z- m9 ]* }; [
};
; I& B: j9 [0 P! u, d8 G, B, l
+ X. s) R4 N& e* c# estatic int __init led_platform_init(void)
8 q* ^2 Z- D, u/ R4 j- [' Z* i% Z2 m{
, N: ?. F3 X# `+ e0 D int ret;
. U. ~- W; [8 D8 f4 k0 Q/ U4 D#if 0
+ T; Z% R& R( J4 u1 S6 Y1 K$ `: r ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 A& q8 ^( V+ @7 E' @ if (ret)
5 I; ]$ e) u0 v* @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ P. D2 @5 s3 l) C1 A6 D* @
"%d\n", ret);3 X% H! N; C( C7 X) H4 U( w& L
#endif
- S: M. t( |( Q" U1 Z2 M: s ret = platform_device_register(&da850_evm_tl_leds_device);
4 K- F9 x5 c! F7 s% f if (ret)% {' u: s; [+ f2 x; Y2 R. y
pr_warning("Could not register som GPIO expander LEDS");
8 }- S6 e5 C! V4 C else
+ ?( ~. g( r1 D/ c: M% N% n printk(KERN_INFO "LED register sucessful!\n");, c7 g, y* n2 D6 y: {5 S5 j( c
% U7 \, t3 [; p9 t return ret;" ]# P$ i, D% A, H& e- K( v
}
; f0 h. q: }- s# A5 {# e9 O3 ^
' D7 O& ^/ t8 G5 H- hstatic void __exit led_platform_exit(void)% M) j0 x L8 {1 L/ D3 |
{
* O$ N+ e: M" l2 \2 _7 V. v platform_device_unregister(&da850_evm_tl_leds_device);
2 z6 R. F+ G! B! j% `0 p3 K2 u% n2 v% M: I. I9 _5 ~) X" e3 W
printk(KERN_INFO "LED unregister!\n");; ^! _! p/ m- c8 Q: ]
}
9 A# }$ E4 Z* P2 U9 }0 Y* B/ Y7 \! u) K' @5 [' `9 Q* I, \
module_init(led_platform_init);
( W' J5 @% m2 Hmodule_exit(led_platform_exit);8 L! n i1 ]; U' u& d
* z, R* e7 Z) k8 g: ~- b
MODULE_DESCRIPTION("Led platform driver");, K" w7 m( p- h& y. U3 F" B' L
MODULE_AUTHOR("Tronlong");: ^$ K, Q$ R) e% K u, H
MODULE_LICENSE("GPL");/ p8 i% w8 E! G4 K
* M* l8 i, [4 h$ B |
|