|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ O: _5 l2 k# }8 j7 v4 ^& f1 m#include <linux/init.h>
" U- ~. C2 l: b8 h#include <linux/module.h>! H* N% V5 ~# X- ?. O9 ]# [( B
#include <linux/kernel.h>* Y w& g2 ]5 B! i& d \8 U- g- k
#include <linux/types.h>: y+ D: N* I- Z9 A. \+ _% F
#include <linux/gpio.h>
; T5 W, q5 c5 \6 @#include <linux/leds.h>, b' F% H# g- W, {8 e3 F5 b2 U0 {: J
#include <linux/platform_device.h>4 Q% a' b# n- i% f7 p( P
1 Y% J- S- _- u* t. v: q' M$ Q
#include <asm/mach-types.h>
" `0 ]# s B" E3 a; z#include <asm/mach/arch.h>
4 C3 O4 ?1 z& [# Y/ c#include <mach/da8xx.h>) n, z6 h2 o+ q9 Q% D
#include <mach/mux.h>
% {$ @# P' F6 i
3 Q! f) W- V2 X! c#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 y( k# k# I- ~! k6 w: q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ |6 ?7 F/ t" P
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' g% _# K7 o; D6 q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 K C3 K* `0 \6 v/ D s6 g$ S
* r& ]+ p: U9 o0 b( C: H2 [/* assign the tl som board LED-GPIOs*/
: m) \3 Z) Y& B* kstatic const short da850_evm_tl_user_led_pins[] = {) i1 Y* `+ Q g( A
/* These pins are definition at <mach/mux.h> file */
9 H$ o j+ w2 \ `5 E DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. g- ]) K: n8 `( |; C# c
-14 B& d4 K+ t; f/ _- b! I# R3 w) j$ f
};
7 @# Y5 w8 n, H
- U6 j3 ] z! ~, c( W0 ustatic struct gpio_led da850_evm_tl_leds[] = {
! i6 o. E) @* s {
6 U! _% j) D4 e: |; a$ M$ ] .active_low = 0,
7 v6 u; q/ j: M. O/ j4 J. @, { .gpio = DA850_USER_LED0,
. X. c ?! C+ } h3 L% e! t! l .name = "user_led0",! O% O8 L: n- \, f* Z
.default_trigger = "default-on",
' p4 z) Y0 g B+ V$ R },
8 D# ^$ i7 \* X- W {* ?* p# A: |2 L9 f& H
.active_low = 0,
9 ] q3 q/ ^$ ~( ~0 n; I& D .gpio = DA850_USER_LED1,
: R4 S: _5 r4 G7 m .name = "user_led1",
& R/ H: i7 ?' g0 G5 i3 }" F* L .default_trigger = "default-on",; {& b8 C: w2 Z7 W( O6 F# I
},0 W8 v+ c# `8 t4 t u
{
H" ]3 v. x+ u .active_low = 0,8 ?& t. c4 w; M
.gpio = DA850_USER_LED2,$ m% b: h8 A0 b$ o8 t
.name = "user_led2",+ S5 Q( }! g* L" `/ z7 E/ T
.default_trigger = "default-on",
0 C* B9 c- M& X0 E7 @ E u$ ^ },6 {3 m) J& g" l3 U& Y
{; [ q5 f- m- _. X
.active_low = 0,) T/ @) O/ N+ b. ?
.gpio = DA850_USER_LED3,8 y( ~9 x& `( M. B+ T
.name = "user_led3",
& O2 U2 @5 |% O) R& H- a .default_trigger = "default-on",+ A) ]2 x8 F' `+ W. t4 Q5 s
}, k( R% O4 f; L1 G
};
2 d* q( V4 z' A1 z" A& d2 e4 T x" o& N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# C7 P( K A, c! S* m" T
.leds = da850_evm_tl_leds,# C7 e# V7 o$ d+ R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 d+ ~+ ~" j7 A. y" A6 q! @9 e};
% C8 R6 |& w0 ^8 W& ]+ A1 ?9 h) I! }, m* G. k5 e
static void led_dev_release(struct device *dev)3 X5 [5 [9 u2 X
{
8 {" \/ m; Y3 X+ j};
# B' _4 u& r# r" Y! G! D0 C0 B! ` c6 R) A' @" z, A" Z; {! o
static struct platform_device da850_evm_tl_leds_device = {6 k# f: k. |% h+ s
.name = "leds-gpio",' \5 f9 |# b2 M; p* H
.id = 1,& u6 {( c) P3 ?1 X+ s$ c# @) d
.dev = {% p% L7 |4 W4 `8 S4 M. _
.platform_data = &da850_evm_tl_leds_pdata,
& W2 b6 j! n/ W/ ^$ i( e) V .release = led_dev_release,
! H* l, l: x1 Z. z& b8 K( a( E7 x- h }
+ W% z7 N2 ~, k% G};. e8 M+ |. }8 R( l9 }
5 m7 H6 ? {4 Y9 {! g* a* Fstatic int __init led_platform_init(void)& D: i0 R# c8 ~' }
{
. I; h v; q8 c4 I# x& Q8 K: T int ret;* w. j* p5 o1 w' v8 G
#if 01 G# n& U) w) S# D4 p4 W
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 u* N: B( ^. t6 \9 r5 d% X if (ret)
6 i' _5 q5 [8 l3 I" A0 E/ Y3 M pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" m( z8 }4 b/ X4 ~) K- J" t# T "%d\n", ret); L3 R6 I" q+ S1 Y6 Y9 T
#endif: V; I5 `3 D: E7 Q2 }( }. K" f
ret = platform_device_register(&da850_evm_tl_leds_device);
/ y3 m$ I. K+ s' d+ d+ F, p if (ret)
1 F& g6 h% o" P! d) [( g$ R% E pr_warning("Could not register som GPIO expander LEDS");) q$ z" ]; T; v4 ?3 U
else
, J% B j" \8 c0 s printk(KERN_INFO "LED register sucessful!\n");
: v+ @3 ^* g2 R+ @' E0 B
7 r. `! W9 v1 v return ret;
$ I/ V6 a1 v* K1 C1 M}
# c3 M$ a3 B$ q/ j5 u" j' H4 f8 r6 ]! }! r
static void __exit led_platform_exit(void)
6 _( ^1 s4 s4 ]7 s{7 r' K8 p) l& g8 p3 U: ]
platform_device_unregister(&da850_evm_tl_leds_device);8 p# i7 w7 t+ [. j
v* r- ~- l% k* L" M% J% z
printk(KERN_INFO "LED unregister!\n");, u$ ]" }/ p+ d/ U$ T1 x; x
}5 C$ x& x" [+ J4 u7 l- M& _# y+ `
# r, d6 y( J! F6 c4 N
module_init(led_platform_init);# x9 h* ]4 s9 H8 s2 P
module_exit(led_platform_exit);
8 X2 R9 n. M1 F% z( G) F8 C8 f, m, f! G1 [# H R2 L
MODULE_DESCRIPTION("Led platform driver");' ?+ m) w0 N8 z$ O J( c
MODULE_AUTHOR("Tronlong");" G. L3 z- t1 c6 I
MODULE_LICENSE("GPL");' d+ G- e8 O: ^9 f9 X5 t- _
- L$ E) C, \+ H) k0 b5 ] T/ l |
|