|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! h' O5 A- }( ~#include <linux/init.h>
+ {4 J/ v) _7 |' i& C3 W, ~#include <linux/module.h>
" v9 g' G2 S5 N4 X#include <linux/kernel.h>
, f' S; Z4 u; {6 s3 E9 k% v#include <linux/types.h>; f7 B( u: b# e0 u
#include <linux/gpio.h>3 J$ B) Y' l* E: n% z2 I/ e2 n/ b$ i
#include <linux/leds.h>
0 Z* c! H$ z k- U% P, k' G#include <linux/platform_device.h>
, `+ w8 z4 v9 B: p" X# B9 n3 J2 G$ M
#include <asm/mach-types.h>( U; t. p1 X4 w' m% O
#include <asm/mach/arch.h>
- l7 T2 F0 K# C#include <mach/da8xx.h>
4 }' }* v$ L! g3 Y$ I: m, W#include <mach/mux.h>% ]/ _8 @- n/ B$ W9 Q( B
' S6 U1 N1 n/ _5 M5 J; J#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 _3 S1 Y$ }) o3 Y$ `#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# }5 v+ z( B) R% P
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 Y+ D3 L* {* m R& {0 y+ `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ J/ T. N C1 z: p
$ [+ H. K' H5 a/* assign the tl som board LED-GPIOs*/( J! y: A3 f! `
static const short da850_evm_tl_user_led_pins[] = {
( Y) J4 o! K8 F /* These pins are definition at <mach/mux.h> file */
3 d' s R$ K* V- R2 w3 D DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 g2 t& Z; o% e8 c" p q
-1$ V2 x' [2 H% m1 \" E/ ?% F
};; i$ U7 G- |& F3 v
& j- I7 S) e1 }1 w ?& F+ ostatic struct gpio_led da850_evm_tl_leds[] = {& c8 x0 S7 C7 t# P! Q5 T( Q
{
) m+ Z. n- n v* J t+ i1 F ` .active_low = 0,
% Z! t' a! T- P3 }5 A7 E .gpio = DA850_USER_LED0,0 H/ |; I9 P& t/ J0 X
.name = "user_led0",& P7 Z* p; ~; J( h; [
.default_trigger = "default-on",* U% ^) t6 q1 O9 t7 A: \6 G' P- Q
},
" ] t+ h/ O! u; l$ P {6 x8 W. N! ^6 s9 r. Z, p! K8 y( a
.active_low = 0,
7 y( K* k0 W7 c! a .gpio = DA850_USER_LED1,% ~" J T7 `9 w; U; s" N. G1 c9 b
.name = "user_led1",
! c5 q, }* {- P4 r' N .default_trigger = "default-on",5 Z" n$ \7 n: [5 ]0 _6 r
},( }4 u5 B8 k5 u/ h
{
2 D. c7 e! q' l/ V: A9 o' ]1 L .active_low = 0,
6 [+ F9 W( ~' u( U4 e .gpio = DA850_USER_LED2,& p# M% z# H: ?; r/ {4 G) }
.name = "user_led2",( O2 X; H% N4 I% ] F a
.default_trigger = "default-on",. i" t ^9 G) T& X
},/ _5 r. E( ] H- v
{$ K! P9 G2 g4 Y1 y0 C/ `6 E0 o
.active_low = 0,
& v0 T( q9 [* L& C2 j0 N .gpio = DA850_USER_LED3,
. O! Q) P" }( x# k8 [6 } .name = "user_led3",$ {, r2 X" Z. M; v- V, B2 v
.default_trigger = "default-on",
8 E# h3 J, M* W+ f' g/ ` },9 z7 N6 N+ m* F( K& L
};
* S' U3 y* } y" J6 c! z8 k6 R5 i
1 b( \: U( }: m9 K' d5 Y9 w& h/ xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: n; `9 t# p# H: f7 D
.leds = da850_evm_tl_leds,
. f$ W2 N# k8 t8 i+ n8 Y6 [7 N .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" y3 ?, i- k" S};
9 d! q. D: m. I M$ A6 J9 T `+ I% R2 G
static void led_dev_release(struct device *dev)) ?0 j1 l( l/ T7 N+ k7 i7 ^' T5 P H
{# z6 C" g6 x5 C! ]7 R9 _
};& r: T: W# C" O& Q7 p8 R. V
. A; g* N: o: F
static struct platform_device da850_evm_tl_leds_device = {! O/ ^8 M4 }: T
.name = "leds-gpio",
2 L' [ w1 I6 W, R& ` .id = 1,- b2 i$ C6 s$ e- u& h( X
.dev = {; `5 o7 ^ g4 @' b/ t8 \
.platform_data = &da850_evm_tl_leds_pdata,
) U- m. n) F9 A1 u" I4 Q y .release = led_dev_release,
# S6 ^+ s. [9 X+ q# J* P }* c7 O$ K- O3 \ s6 M( B/ q( w
};
4 @! g: Y; {, R" C1 Q. }8 S
' A6 L5 f8 b# U6 @$ J, R4 S$ kstatic int __init led_platform_init(void)6 |$ @( A5 s6 A z
{* S" a2 \$ h$ Q( r: z$ b$ s* R# T
int ret;+ |5 i! l6 [" u' r
#if 0 a# a6 l. u/ i2 g) h+ J/ K
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ n4 d4 x) j J if (ret)4 y2 Y8 i- _+ C5 i, x t& `% O
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 @# Z+ M a* r7 _& _ "%d\n", ret);
9 l$ Q. V1 P0 K0 Z' m: K#endif3 f2 O2 ? B2 W1 X4 \
ret = platform_device_register(&da850_evm_tl_leds_device); p5 I8 F' { k) a" z) q8 k* v
if (ret)3 r. n/ q+ v4 Q- d# B9 }& z
pr_warning("Could not register som GPIO expander LEDS");% U( {4 ^! K& k
else0 [* W+ A& R9 J: B
printk(KERN_INFO "LED register sucessful!\n");7 r) _: l7 P( I7 D- B
9 r7 X6 U( f. [! W4 u7 C8 t return ret;
! Z# Y3 S, ]4 c8 |& M3 d: ] ^& w' u}1 f/ ^7 e! t: n+ D" z- U7 ^
/ q" m6 ]$ i$ b* Ustatic void __exit led_platform_exit(void)5 [& K } W! [$ P% w' {
{
1 K8 l3 j2 K% f- S platform_device_unregister(&da850_evm_tl_leds_device);
- g6 ^/ ]# \$ T& q$ h
3 [7 \/ R6 W/ M8 F$ g- N1 \ printk(KERN_INFO "LED unregister!\n");
6 C5 p2 G9 ^2 r6 N}* X1 I- H$ C, S8 I. r/ ? Y
# m0 i. [& I, }module_init(led_platform_init);
' V! h1 R$ |( k! G! X% I/ Smodule_exit(led_platform_exit);
' R9 i8 e5 |: F& \8 L9 d
6 g7 W) e" s* \MODULE_DESCRIPTION("Led platform driver");/ \, g. j) b; i9 B" x$ q2 Q
MODULE_AUTHOR("Tronlong");8 C/ D! v' l" X5 p' B
MODULE_LICENSE("GPL");+ H2 r# `2 _# r$ Z
1 _* X; L! _- }* Q- O/ B |
|