|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, g# O9 a( W2 o$ r) ]#include <linux/init.h>
* m' K8 k; V4 K3 Q7 \, @/ j#include <linux/module.h>; T+ \. }' W e; n
#include <linux/kernel.h>
5 E% |' K6 D" u# E9 n7 S#include <linux/types.h>
1 N4 F( {3 D) ?- Y#include <linux/gpio.h>
* G6 t& F) @5 p#include <linux/leds.h>
- C0 q3 ]$ g8 Q8 U. @/ L ^#include <linux/platform_device.h>
6 D. C+ E" ^, N* H1 y x8 Y; P! y, u
#include <asm/mach-types.h>
# B6 K' H3 W d5 z1 y: \/ L0 l#include <asm/mach/arch.h>& s& h1 L9 H; D7 N% l$ X
#include <mach/da8xx.h>: }% o; ?, T( K$ H8 c( X
#include <mach/mux.h>0 O( G1 ?6 X" z9 K+ A0 r4 p5 [
, m* S3 D& E+ q9 s+ A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 R% ]( h$ j& g1 j" A7 ]
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- j/ u. l& p) a- j; H W* K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) }+ d, }) ]. S8 g: E5 Y. G. z# `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 p. t2 }% N6 b! z6 p
( m! h! I9 A! `) z' z/* assign the tl som board LED-GPIOs*/4 _" K* X4 [: e# o, r
static const short da850_evm_tl_user_led_pins[] = {
) m! _' e. {7 I* m4 T9 i" d% N /* These pins are definition at <mach/mux.h> file */$ \6 p1 u+ Y& J6 V" S9 Y- [+ b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& E, H @& ?7 ~* F& @8 i! p p
-1+ g6 \* ]6 a. k b- b1 l+ z9 K
};; Z4 u7 B: ^4 f/ {5 ~
. S) E, X! l! i1 ystatic struct gpio_led da850_evm_tl_leds[] = {' s* e2 @0 N7 M) r3 g& J
{
; ]$ @) ]3 p5 [/ C! t0 _/ { .active_low = 0,9 v) F- A+ v4 `/ n$ q
.gpio = DA850_USER_LED0,3 w* C, D# T* l" Z9 @
.name = "user_led0",0 Q% r; r8 H. Q: y8 T- J( g8 h8 ^3 c
.default_trigger = "default-on",
$ m& e7 y. ?/ e/ S, a9 V+ x4 U },( G$ g8 b" `4 |1 x0 ~1 T
{: V4 \. t! t* @. `7 e
.active_low = 0,; K& g' ]' H; F( h$ H
.gpio = DA850_USER_LED1,
0 a) }% d2 ]( E) K& z* y! T .name = "user_led1",
! i* {, Z& j# H S: K8 A z: V5 R .default_trigger = "default-on",
2 f- V/ @' B5 E: x* ` },1 z: _4 ?) i* @) d- K5 U
{3 u4 k- q4 U- H- L
.active_low = 0,: s( Q1 Y5 Q- `% o- m* M
.gpio = DA850_USER_LED2,
?; t1 M. ]) V+ Q: Z .name = "user_led2",5 E3 q- X" f( Y. q+ a+ X6 U4 B
.default_trigger = "default-on",' ~0 o) o1 _! x: P8 `
},+ }! E: L1 ? `3 T. i
{
' F4 I( M* E" x% o .active_low = 0,
! q Z5 k9 Z9 L$ g .gpio = DA850_USER_LED3,
- O6 X' Q$ g' D) K- \" V' b .name = "user_led3",
$ B1 O/ e% H; S .default_trigger = "default-on",5 o# N8 m8 l! H8 z
},
8 B. s9 `5 ?+ z6 `5 C) n};" g6 ]+ y9 F" U. P. l1 \
4 I+ n( i$ r( }( k" F& J& ~) r
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) v J6 F' o; C3 A6 U- }, A: C+ j .leds = da850_evm_tl_leds,
" Y! _ j$ K+ q0 H" S1 A0 x: G .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* q% w j$ B- a- T: Q4 \
};
$ o# G% j6 H7 M5 O1 C9 M; Q1 }, ?7 a* V4 x! Y
static void led_dev_release(struct device *dev)8 j9 X; i3 Y8 H, `' b
{$ \9 R5 J. f2 n( ^+ S" }' V- ]
};2 P% A0 h8 l+ W
+ p9 L8 s9 w. h3 E# P, Qstatic struct platform_device da850_evm_tl_leds_device = {
: k$ h( ?5 l z5 X# D1 C .name = "leds-gpio",0 d- P1 f7 z' e
.id = 1,/ z* D3 l& {/ V% u3 @7 \2 K7 h
.dev = {' x7 E" A, Q& a( I
.platform_data = &da850_evm_tl_leds_pdata,& K- j3 r1 P7 k. t: P* b
.release = led_dev_release,
% j" ~1 @; O( r8 O }
2 e* R6 v+ m' A6 O; F}; A4 Y$ Z# W3 F+ H, h, O, O
. z' Z; G& z- Y" E% o$ y
static int __init led_platform_init(void)
# r. l8 O# v' V9 H6 G/ ~/ M. s0 O{( ]7 [" P" f$ Q y4 S
int ret;! q6 i. Z: e# _* M% G J7 ?" m/ N
#if 0
# i* c" g5 K& T- z1 r& ?2 }+ ]/ W ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( u l* q$ m$ I if (ret)
" `2 g7 E7 a; d% i/ F% p pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& p4 s, \: m1 c: f+ o* w9 t "%d\n", ret);
* ^. v# o3 n3 {% c6 V3 S6 t! r#endif0 o" n$ h! V7 i$ n
ret = platform_device_register(&da850_evm_tl_leds_device);' x. l7 N: o. C
if (ret)2 n! q u1 T9 U Y2 H( v, [
pr_warning("Could not register som GPIO expander LEDS");6 m( X6 {# S% y5 z. Q6 u
else
% K3 M( [% L" @. O1 T printk(KERN_INFO "LED register sucessful!\n");
?6 ~3 y8 @) V- K- `( U- {0 o/ n- a' Q$ y9 i; v v! ^% k+ P0 E
return ret;
# u* X: C3 x' X1 w}4 ?% O! S, ]: L/ M l# T* i: t' O6 r) [
$ J% [2 y1 t: D* k3 qstatic void __exit led_platform_exit(void)
! f6 }/ x% K$ }8 |1 _- } o; |" G{
5 a( c6 S/ N+ h& ~# { platform_device_unregister(&da850_evm_tl_leds_device);+ S k4 z6 W& X+ m
! m; q1 _, s/ b6 z9 g3 u; m printk(KERN_INFO "LED unregister!\n");" e3 O* ?1 Q; O9 T
}
$ g; O) ~5 X2 X5 \* g
0 o6 e. h4 h4 Qmodule_init(led_platform_init);& l/ L8 ~( w1 |6 c
module_exit(led_platform_exit);* Y0 q' z' a1 |* s
# B E. S/ \9 [, n5 W, C' oMODULE_DESCRIPTION("Led platform driver");/ h( ~9 t) C9 a. t' ~$ p
MODULE_AUTHOR("Tronlong");
' o. X4 b6 n- t' E; c) S7 V2 z5 aMODULE_LICENSE("GPL");/ [( e) s4 R# u) S$ J3 ]
5 f, N( Y: x% n+ ^- W( d4 I
|
|