|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 v! x/ A. B- q2 E9 l" ]2 B#include <linux/init.h>
4 j* O! [3 ~- |- X- f. h. Q#include <linux/module.h>
' s3 l- |" K' T#include <linux/kernel.h>& Z3 d( t9 n0 [& k
#include <linux/types.h>
( N& n7 Y0 h9 L#include <linux/gpio.h>: M5 c1 _5 j3 j. u; l% X6 y
#include <linux/leds.h>- W0 ^3 r# f4 c* ?: u+ A
#include <linux/platform_device.h>
# k) l+ P' @. Y8 g. Q! ~7 z) y) F* v& p) o$ P/ A+ t+ M( N2 F
#include <asm/mach-types.h>. _4 | k5 C% q5 f' t* `# Y- }
#include <asm/mach/arch.h>
9 \" h* s& N* H# K#include <mach/da8xx.h>) ]0 a( U( O; V+ o9 M
#include <mach/mux.h>
( U1 }4 h' x! X/ G3 b4 s5 W9 B1 n4 J6 c5 U0 W9 ~
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 Y. A" C3 X$ q. m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 k9 T8 O2 ]$ K2 w- g; l1 Z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* s5 }$ v9 Z" g9 J8 O6 [# n4 @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 c$ r# L4 x% `
* A4 n, F. T* a* q/* assign the tl som board LED-GPIOs*/
, R2 m X2 `, l U5 R( E3 gstatic const short da850_evm_tl_user_led_pins[] = {
- v, d0 G7 i9 v# N. S /* These pins are definition at <mach/mux.h> file */
- W/ n+ K2 y! ^' X7 q0 H: N DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 c- ^2 J- D. ~( N. g -1. h( O5 K n1 e
};
6 Z, { Q6 G( h- b
0 \2 U: o, M8 X6 s+ Q. Cstatic struct gpio_led da850_evm_tl_leds[] = {) }' g" E, N- h2 g) e# V# r" ]
{
- [! a7 Y% [9 `- } .active_low = 0,6 a2 @0 Y3 Z; k
.gpio = DA850_USER_LED0,- h' c( f: w* l; {
.name = "user_led0",
9 U( p; U ~1 F) \+ X, V4 V .default_trigger = "default-on",
+ j4 \- c A" T* b) R) H8 k },
& N) P; A7 M0 L5 G2 ` {: Y/ c: X; w3 k9 G; ?1 X# R
.active_low = 0,: O# x4 N% i6 T8 ^& d' A5 Z& ~
.gpio = DA850_USER_LED1,
7 B% L! s# K! _6 x% Z( k; o8 B .name = "user_led1",/ V2 G/ p! b2 K4 r1 ]1 A2 V
.default_trigger = "default-on",
0 F4 R: G9 H! T E9 [0 b" I% @ },- _) O7 J7 H* s3 p
{
. b+ W( f* f X- u* J; P+ l R: z .active_low = 0,7 D3 L/ u* o1 ^2 q/ G
.gpio = DA850_USER_LED2,
4 `2 V0 B% U, J- o0 L .name = "user_led2",! u X* E# s3 c1 a; |$ D
.default_trigger = "default-on",
5 f; t" A; x" y7 ?- y1 u },
" v# [/ s7 A: v' p {
) y; H7 U1 | @/ F$ s& Y( T .active_low = 0,; G+ s1 S+ I. g* S. b5 e6 e
.gpio = DA850_USER_LED3,
& [3 d: g0 A: \) c8 p .name = "user_led3",
Y0 @/ ]9 |1 e0 v* i1 Y" R. J .default_trigger = "default-on",9 T9 n( r$ h2 [7 F
},9 {! v! l: U& e) o, {$ I! k& ^
};0 X; h% _( w6 p8 h! H/ N
8 p% z1 l6 \0 v# L* ~
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { J" |# Y0 [' Y( s. A
.leds = da850_evm_tl_leds,
! N; a+ d3 C* [. U' \, ^ [ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),. u. s; p4 o- u [! Z/ U
};, O0 }# T( \! X$ m* n4 P/ F$ y
( S' [1 h0 `( S! F
static void led_dev_release(struct device *dev) w8 L- C6 @1 n, H) T
{
# s2 C: D R. x# F. q- j; g};
! x. G2 q( h6 L& F9 Q) f5 Y; K5 L. F+ J) ~: l1 ?( m' d
static struct platform_device da850_evm_tl_leds_device = {& x" M& F% i9 f$ s
.name = "leds-gpio",
0 _2 X# U: o, k .id = 1,
1 X( B+ M( a, J8 k! s f' u, B1 ?' e .dev = {+ u9 P# ^7 v1 D8 L8 P
.platform_data = &da850_evm_tl_leds_pdata,
3 P; @2 o }& t! b* g .release = led_dev_release,
4 a b2 M: s" H( @ }% V- s) u1 P& a
};8 v! K" T& N M! v; o# W
2 p; C7 r8 ]/ n/ S- a' xstatic int __init led_platform_init(void): y, v$ x6 W# J7 Q) G' F# }" V
{
2 D2 h v( D2 G# q4 F int ret;
/ [: _. j# h( u# }1 G, K#if 0
$ h q* x0 N- B- o0 D ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 i# w) `( E0 i; |+ k5 e
if (ret)
2 ~' ^( E) x8 p0 M; ^# r5 w% b pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% [7 v( J( S4 S- t "%d\n", ret);
, l8 ^* O7 _6 D" S, b#endif0 v1 P/ s3 |1 @6 f
ret = platform_device_register(&da850_evm_tl_leds_device);3 m. N( J8 H) o1 i: w5 l
if (ret)5 o y; k+ p0 A0 o0 \
pr_warning("Could not register som GPIO expander LEDS");
1 ^0 {2 C- n1 x7 Q else* w. \0 W) l; _
printk(KERN_INFO "LED register sucessful!\n");
Q) a+ T% B, s; u8 K! f/ v
8 r( B0 F( j0 ?. s return ret;
6 E# m4 b B) K* y2 d5 ^}
" v) y# X3 ^4 Y0 l) R9 b! T: p5 e8 Y7 a O$ o x* d
static void __exit led_platform_exit(void)) ~% |" P" _5 ^# R
{
7 P5 Y3 {) T7 d platform_device_unregister(&da850_evm_tl_leds_device);
( g% Q" j( E6 ? H$ y4 G1 M, _& A6 v8 f- S
printk(KERN_INFO "LED unregister!\n");
2 d/ l/ A5 C& ?$ b}9 C4 s1 n1 o" Y+ y# m/ g) w
& L0 ?& u) ^: M
module_init(led_platform_init);
$ B, b: B- K T+ \' s2 Gmodule_exit(led_platform_exit);
, n+ }2 ^/ d' I T% o
! J0 K, Z6 }( EMODULE_DESCRIPTION("Led platform driver");
: n1 v' q" }) G JMODULE_AUTHOR("Tronlong");
0 ^) f `6 Q7 B5 U. W8 z" RMODULE_LICENSE("GPL");- I } G* K9 I$ a, r( ~% k# p
0 s& i! q0 \, h' B1 k2 U: R& @" Y |
|