|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 u& n" z0 e( z3 |. }#include <linux/init.h>2 ~+ e" n& a* ]
#include <linux/module.h>
' i0 g- U- R8 t) A9 e2 {3 [. h" G#include <linux/kernel.h>4 W2 t& T' b# f
#include <linux/types.h>
" R& f4 d1 R/ a7 K3 |#include <linux/gpio.h>. Q$ G* h# M5 G$ A7 m
#include <linux/leds.h>
$ x! f) ] x3 `: O$ x( w1 b#include <linux/platform_device.h>
# S5 b. G. o2 z- s; R L1 L, d: [# f
#include <asm/mach-types.h># t {9 C8 z3 c+ G( K6 I
#include <asm/mach/arch.h>
( S; @7 T4 Q0 \9 _#include <mach/da8xx.h>
, D1 u3 L' D/ S. t! @! F#include <mach/mux.h>
8 K( V1 n1 m: q- [4 Z/ ]! x1 Q
& f1 E( y0 s+ v* l. ~" d e#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: ]. Z2 r# n& |2 K6 o1 ~- P+ s#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( n- ^) g( A9 r. v5 c1 v#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 x O+ }, d% _8 |#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) U D$ V( `; g1 h
& n8 x4 X3 _3 R: q5 ]/* assign the tl som board LED-GPIOs*/
# V$ @) y% R' p% `( h4 Mstatic const short da850_evm_tl_user_led_pins[] = {
2 v T! o( C5 r# B /* These pins are definition at <mach/mux.h> file */
9 C% R2 [% ?5 e3 B" U1 [ I DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. V! X) I9 @- K7 D. {6 I$ |
-1
2 P: v( [) K( Q9 A4 ?3 a};! d, u8 k8 Q& r% F) ]! H3 h! n) c
2 a. ~+ G& ?3 |3 L& m. Z# H
static struct gpio_led da850_evm_tl_leds[] = {6 `7 h" W- [$ P% Q
{
6 O) U% _& b* K8 Z _7 V .active_low = 0,
: e1 c1 z: ^/ d" a7 ?4 }- ]7 d .gpio = DA850_USER_LED0,0 P# H. d; E2 e
.name = "user_led0",
3 k& S. I/ K6 @/ v .default_trigger = "default-on",; o4 @9 r. b( n s
},
; D3 O( _2 p- X& O4 K {$ a2 _! S. q. _8 P2 ]4 \
.active_low = 0,
9 ~6 S% R7 ]9 T$ r+ a. V7 I o .gpio = DA850_USER_LED1,
s: f( y; W+ @0 o .name = "user_led1",7 |0 O* h( M5 p/ h
.default_trigger = "default-on",+ D; g: `! p3 J6 [" a& c
},
[+ m9 m& |5 E {
+ x2 K! F# ?0 A6 \8 H1 S2 V .active_low = 0,
. Q: K7 |: t) R+ L* O, \ .gpio = DA850_USER_LED2,3 K, d' d; d% q3 P$ L- ]
.name = "user_led2",/ s R. J- O/ e; j3 c
.default_trigger = "default-on",
+ D" g3 z; }8 \' ?. h3 a },2 e1 ]: L8 c" d, S: f
{9 j. l' \, Q& @7 U) T |
.active_low = 0,- p- |( Q- }4 A/ i
.gpio = DA850_USER_LED3,
# _* v! h \3 g3 k .name = "user_led3",
- Q9 f# d% m5 _ H8 f .default_trigger = "default-on",, D2 c- Q8 K& [ ]( d2 S; Q
},
% c$ @, P; o) J, v};
2 M8 e r# u" `) P5 B; W* G" R- s* r. ]* ~6 O
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 Y0 A4 D) m" y! k6 I
.leds = da850_evm_tl_leds,1 x- `+ D" i; O' X9 b- }
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 D* h) r7 {; I. O& {! ?+ n/ d' ]};
; b# }2 E5 x7 O+ z" V) s; I9 n% a6 K5 Q \& j, o
static void led_dev_release(struct device *dev) O+ _% M2 p/ r$ ]1 O6 q
{
; ^. x$ y" [2 y! a9 F};9 m5 X7 g' j0 q! h- h
4 ]$ x y4 f( _. @
static struct platform_device da850_evm_tl_leds_device = {
( |) i8 h* U* _1 L9 K) | .name = "leds-gpio",
" ?) s1 Y3 F6 f) V9 ?' z& Q .id = 1,
3 W. j) R+ v8 @& s: u2 Q8 l .dev = { I+ U' c. @. ^$ Y( |) t
.platform_data = &da850_evm_tl_leds_pdata,
2 K# ?; v2 h3 b .release = led_dev_release,3 a; w3 _+ P2 f1 N5 _
}5 l- t; a$ P5 N. W. r
};
4 P, _4 v1 p1 |5 I1 a. N0 N7 D9 O
! w! N; f2 {( y2 G+ Hstatic int __init led_platform_init(void)- e7 B6 m% `3 g W! S/ j( G
{& F0 c' W: n, n6 i
int ret;. I0 Q5 d' S8 K! e
#if 0
. ^1 H* r# y0 @7 ~1 g ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* X4 G" G% Y) P
if (ret). }$ Y/ z" ?+ E7 C# n {% D
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, ]4 H! u2 ^% ]. A, c "%d\n", ret);
; Y6 S- _$ @) J' T#endif8 h+ R& m: ?# W& X
ret = platform_device_register(&da850_evm_tl_leds_device);
2 _0 Z O. b* g! Y [. Y if (ret)" d' g. [4 O2 k. I, M6 l
pr_warning("Could not register som GPIO expander LEDS");4 @# B) [+ H* h3 S
else: K+ V6 P' b+ Z' k) l3 [
printk(KERN_INFO "LED register sucessful!\n");* h9 N. ^5 {0 q/ S R
! U9 ~9 E% x$ @8 F, |' A return ret;
8 [+ F) m/ v r( H9 d- w}
. T2 t' t( y: Z' T; ^/ i
z. A' g* ~. i# e) J3 _8 Cstatic void __exit led_platform_exit(void)
! i! A6 Q" r6 ^( s7 \' ~{' F' @$ A. E% J( r7 e0 ~! p
platform_device_unregister(&da850_evm_tl_leds_device);. K; X% G+ R% h% \. ^1 U- i
' W$ |0 Z: o( T# W' } printk(KERN_INFO "LED unregister!\n");
; U; Y0 e* Z! b3 k}; q* V" Q( H/ R# j5 p% v
* _+ U+ O$ {) x' i' v4 e
module_init(led_platform_init);
. C# L5 z* p4 G8 V4 }5 j! M7 Umodule_exit(led_platform_exit);
2 @1 Q! }' {) F$ d# I3 i2 u
# H- x$ m. }: g1 MMODULE_DESCRIPTION("Led platform driver");
- }6 W$ O( |. W- D( q2 xMODULE_AUTHOR("Tronlong");3 K. U) t5 ?" J3 E' T
MODULE_LICENSE("GPL");# L; I& d: i' K/ f
( w9 U3 _' N. \+ B/ G& N# J$ X, D
|
|