|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 @- `9 M# V( F$ I( M
#include <linux/init.h>
! ^! ~6 j+ m$ l& t E8 ]#include <linux/module.h>2 s8 c% N3 L2 H
#include <linux/kernel.h>
9 d: b Y( s% n0 ]2 X9 X. J" Q#include <linux/types.h>2 \ d1 g; C1 b5 `
#include <linux/gpio.h>6 Z. X: O) i% I8 E
#include <linux/leds.h>
% J0 Z, o3 V( u; e3 L#include <linux/platform_device.h>5 u* O" D; Z% }+ q. S2 m
# e+ |2 ^7 W y1 y, p2 e0 a* R#include <asm/mach-types.h>; @% ^# l8 g( i; C% K A% q; f
#include <asm/mach/arch.h>; D G2 }5 q. A0 ^! A8 ^
#include <mach/da8xx.h>
. d' G) ]2 B$ t8 |! V1 v8 k# Z& L#include <mach/mux.h>
4 V2 f& H- C0 v, l5 V: Y M/ u5 w' F! |* b8 O
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& r& v9 |+ r0 P. }) }7 Y& s. }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( r6 i- \& A! Y; w4 j#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& V* x. [/ m3 e R$ n0 n7 z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), r6 G1 C8 V! z( Q7 g( B& N( J
' A h- T) E$ A5 Z0 }3 ^" {/* assign the tl som board LED-GPIOs*/
7 O: y+ X: @' Ustatic const short da850_evm_tl_user_led_pins[] = {
+ a |0 ?1 I6 e /* These pins are definition at <mach/mux.h> file */* t3 M7 F( F2 {, j- m' y" O, Y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' @: z, v' O$ l
-1
6 K9 e7 p: N3 R3 u};1 c2 }6 S0 @; y, q' n
$ D4 Q- Z* t. {1 o, `7 I% s, ~
static struct gpio_led da850_evm_tl_leds[] = {
2 V) W2 a' |: G0 [% I1 U {
9 n3 }! @" G2 \: Y .active_low = 0,+ n1 m2 }! A# A; \- m% f3 j
.gpio = DA850_USER_LED0,
8 e2 B: C, E/ D! @ .name = "user_led0",+ Y* f6 q h) M6 s
.default_trigger = "default-on",
0 u& c; g: q' u# p },7 O: O% I; k/ }7 a" N) f
{
( z. A$ W! l! b+ S* r/ Z4 m .active_low = 0,
8 F6 C, I5 n" Y# U6 o .gpio = DA850_USER_LED1,# z1 M7 E' w! J
.name = "user_led1",
6 I: I K" U- W' }" G' }" r; T .default_trigger = "default-on",
6 ]. ^1 m5 z) J0 V; d( ~ },
: W1 D8 B$ v7 ~1 P3 b% p( @ {' o J' K& T$ ^
.active_low = 0,- v. h& m3 {# o
.gpio = DA850_USER_LED2,- X. D7 ^* H7 p8 q$ B1 X3 ?* I
.name = "user_led2",
! u# e( \+ z6 O* K, D .default_trigger = "default-on",
6 G; N; ]7 \& a4 N" t5 F },9 _/ F, A) n; v, U" G, c5 v
{3 T. O. C6 I& g) _' R7 Q
.active_low = 0,
2 l. s$ n5 Q1 P .gpio = DA850_USER_LED3,
4 r% r7 k# N9 L; I3 S4 z) J .name = "user_led3",
4 X. ?! V% T) b0 Y/ G8 _1 i* H0 n5 v .default_trigger = "default-on",; i6 {, K$ W2 F" D( q
},
" X) a/ b" Y6 ? w( e. `8 ]};2 s Z5 S3 O% |7 Y% E
' S2 j9 X+ j0 L" m2 Pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' N2 m; u. W8 d .leds = da850_evm_tl_leds,* h9 L& x4 p& o- K. ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) |3 L2 i. r! C4 `0 J};
8 P2 L' e3 t' F" s R6 Z7 C; h1 m4 N T2 h
static void led_dev_release(struct device *dev)
) D; M4 g% [( [5 l{
) D6 D+ f4 a! K4 e7 J) _};
. w0 v3 M3 O0 j
& G1 U# u; J* I' G! }, `( }static struct platform_device da850_evm_tl_leds_device = {% h7 x O$ b1 R3 ^+ P, G& d6 r
.name = "leds-gpio",2 p; o: L/ N# l
.id = 1,
* s! v- w! V5 W) ?7 o- c1 E .dev = {2 n, b% x& ^/ G) J% k' k8 @" ]
.platform_data = &da850_evm_tl_leds_pdata,! V5 ~" G/ J1 @- n4 P
.release = led_dev_release,7 L7 T* p) w% N/ {* p, w% G
}
' i6 h# n+ a$ U};- q8 E! v) F0 W. T
) F5 J; G( q0 ^7 _ A5 Astatic int __init led_platform_init(void)
% V/ |9 T9 S8 `, @/ i9 h. f{5 I, A4 y% g u! Y; D7 F, H
int ret;
1 w! v' l: |2 S, T#if 0
3 h: G3 |! h1 r6 k4 r) q0 I ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ `* t' i$ ?) {
if (ret)
) o$ A6 i8 p& L0 o E pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( |! J( v' W* j7 w
"%d\n", ret);3 ~5 ^8 Q9 u2 D* O5 N
#endif
6 m8 `. q0 ?$ o6 j2 u2 M ret = platform_device_register(&da850_evm_tl_leds_device);4 W, s2 X) M+ l3 K
if (ret)9 v! p; y: T5 Y' e& b% y
pr_warning("Could not register som GPIO expander LEDS");
1 B8 b- z" \6 z7 h else5 r5 N9 P& O! p/ x
printk(KERN_INFO "LED register sucessful!\n");& ~* }# F, k/ [$ D0 b! [
! S2 b( o, k" ?5 W9 ?. Q
return ret;, R% l; x1 h) U* I: k
}" T' j- h) g" s- z. o6 D% V
" Y f2 E; [. j9 q
static void __exit led_platform_exit(void); u# r8 C8 P" Y0 [5 O5 K" b& m) l
{0 n) b# |! L% ]0 L- `% {
platform_device_unregister(&da850_evm_tl_leds_device);
% @2 F' h& Q G7 q2 t2 v7 k( n/ P; F$ d6 M: E. u( ?+ X, h0 [* a8 \
printk(KERN_INFO "LED unregister!\n");/ `: X2 m5 R' t- F% A
}
5 |' V! M6 V. p! J5 e& q+ L/ {7 ~; U8 |* f, a; c
module_init(led_platform_init);
8 U% G5 O" X7 _- emodule_exit(led_platform_exit);
/ m$ f" Z" [7 N/ t" c# l0 ?9 D' H2 v% _$ Y
MODULE_DESCRIPTION("Led platform driver");. e( b" R. e- d8 C7 d/ u# Y
MODULE_AUTHOR("Tronlong");' S1 F% R# U* M: ]7 Q
MODULE_LICENSE("GPL");
/ s n1 y, U3 c* p6 Q9 \* k3 [
. Q j, V0 E% T* N, O& j- ~. Q |
|