|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) a: M) \0 \7 Y+ H+ v Y
#include <linux/init.h>
" i1 p9 {' H \9 q$ H q#include <linux/module.h>
9 t$ ^, ]0 X& u#include <linux/kernel.h>' r" o0 r, ]& }9 q- Q" b1 l
#include <linux/types.h>) [$ A/ F* v# R, C8 D& a
#include <linux/gpio.h>/ B, \2 J( o8 V6 q) s$ y# W: y% U
#include <linux/leds.h>
7 U& Z0 @3 @: H: Q6 A( A#include <linux/platform_device.h>/ t: |# Y7 C# z8 `1 `# [$ q
( U- x# ^+ Y+ p, I
#include <asm/mach-types.h>7 b$ ?+ V! t9 W2 S) F6 c& n
#include <asm/mach/arch.h>
) k5 i# ^* B/ q0 ]( O' x3 n#include <mach/da8xx.h>, I8 Y$ ]5 w* ?+ h
#include <mach/mux.h>
2 U ^; _- Q( ]6 |( ~5 R7 `$ ]. M- C' n4 G
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ s/ y" u0 S8 Y) r: ^
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 d* i7 m8 Y, {: J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ P1 Z/ n- B' t9 F0 E
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ A3 n, c: K/ O; ~' }/ s
' {+ _* G6 ]" s/ ?1 w1 n3 G
/* assign the tl som board LED-GPIOs*/6 @& o6 z0 e( x3 v- V
static const short da850_evm_tl_user_led_pins[] = {
% [( V+ {# q. a8 W( g /* These pins are definition at <mach/mux.h> file */' c/ s2 ^ H3 a2 a# t3 [
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 ]/ }; y7 `0 A) N4 a -1- M# m) D7 W# F i
};9 ^6 G5 E D, G9 y) D
& r, Z7 l7 Z8 b& J9 ?7 r
static struct gpio_led da850_evm_tl_leds[] = {3 y/ m* v; H* e, F Y6 b" ]
{
9 i8 A/ h, ` S" k# T4 h .active_low = 0,
+ Q8 p" R7 ~( X; ~" X .gpio = DA850_USER_LED0,8 ~& j! k) r% R- C: W9 `
.name = "user_led0",. v1 t, _' y: p" Q5 b7 K
.default_trigger = "default-on",
) k. B2 m) p9 v E0 n# t& j% C, p },
, Y2 T* i% Q2 S# B- v& U; @ {! y. n* p! \+ G( s( r0 \ a
.active_low = 0,0 D: G ?% [2 J3 `4 X
.gpio = DA850_USER_LED1, A- \+ S3 d( O4 J8 g r
.name = "user_led1",# [. C; H9 Z+ o8 L
.default_trigger = "default-on",
* J3 e; W* {$ O% R% j },/ f5 N) g& x4 F- M5 d- w
{
; j' X/ s. q& D# B .active_low = 0,
, V9 ?4 s5 @' D6 o' Q .gpio = DA850_USER_LED2,
6 X% i/ ]2 v- Y& _, z' B .name = "user_led2",
# J% @3 i4 x7 _% s .default_trigger = "default-on",# O& w. F$ o9 x
},
: {3 p& t6 i# [; U {7 l9 x% {) A9 r3 ?5 W. N
.active_low = 0,5 b* U" O9 \5 \& c" c
.gpio = DA850_USER_LED3,
; x: l, X+ h7 E C .name = "user_led3",, d0 N% w3 a5 y) P' s
.default_trigger = "default-on",$ L+ X P* a2 \$ i3 C3 k
},8 q. z- V& Z% f
};9 z9 |7 I5 Z% G4 C
J& ~* J- Q8 W7 L- ^) Dstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 C4 [' u m% y( L
.leds = da850_evm_tl_leds,
4 j2 K' F' \/ V& k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ M& B( r0 I/ \9 e# t) }5 t};" u- G) y9 d6 G% a: \' |7 o) A- V) T
' `" N2 C" C5 Z- b3 t
static void led_dev_release(struct device *dev)6 F, }% F" o" l( j; d/ E, v4 Q0 t
{( x$ J5 q* A2 z+ {; J* e
};
. u A( ~2 v. c1 D( j& ~+ u2 [6 C( Q! t& E& j. L( B' ^
static struct platform_device da850_evm_tl_leds_device = {5 i6 [8 N' ~' }5 Z& y8 Y. f
.name = "leds-gpio",
2 J1 I& M3 x; g4 B6 y .id = 1,+ A% L( i! m4 e2 C; T( ?, `' {8 O
.dev = {
1 A5 L9 B6 n$ p# a$ S .platform_data = &da850_evm_tl_leds_pdata,# k2 F) d% P9 X$ P, f& O
.release = led_dev_release,9 `+ p$ P, G/ f+ P% M/ C
}
( x1 P2 g( }4 W- ^. y# I7 N+ ^};
. Q7 ~. g5 R* d( D0 R
' q! q# P: V$ \7 Y5 ^" ystatic int __init led_platform_init(void)
. ^8 [( G0 N1 P. n$ ^{
4 r( f! ~& \' p int ret;" c( G7 s" c1 O. \5 b6 @7 v" i. ^ _
#if 06 `$ Y ?7 T" a8 X7 x+ j
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, _1 G* f+ o% Z% [( u if (ret)
$ b, F$ F" e7 h pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 f0 r; E2 A6 G% }% Z$ m% j- }! u0 | "%d\n", ret);" W, F1 ~: K, [* h
#endif/ v! A! B% g- L. o* t' m
ret = platform_device_register(&da850_evm_tl_leds_device);$ i V% B; S8 l5 Z# F6 E
if (ret)
8 A6 D0 \# E* `3 H/ R' w. T pr_warning("Could not register som GPIO expander LEDS");
) R/ o& ?& L$ `4 Z1 i else. h0 P5 F4 \ D1 j& b1 N& k }
printk(KERN_INFO "LED register sucessful!\n");$ g( R) t0 i& D3 r% N8 _5 n+ D
( i/ V- o0 z. ]# K1 Z; v! c
return ret;
( l- T+ Y, `, M* z$ y5 v}. ? Z+ V) t1 q, j) K8 B
9 b( O! h4 K( T$ C
static void __exit led_platform_exit(void)
) L: _; S0 t N- ?% z% z# O{1 T. K# v/ w/ I# ^
platform_device_unregister(&da850_evm_tl_leds_device);. N8 J& V x6 m0 }
! E: h0 X9 C3 z; `* y printk(KERN_INFO "LED unregister!\n");1 ~. M3 j; e- @# ~5 ~$ A. `
}9 k# F" \2 A. q1 }0 Y4 _$ c
' @- K) }9 o5 f) x' U6 t! W# \9 imodule_init(led_platform_init);, t, D J8 S& w7 u" C3 N6 Y
module_exit(led_platform_exit); p* a: ]4 p4 v8 X/ e
5 r8 r- U% h7 N+ {
MODULE_DESCRIPTION("Led platform driver");
! N7 z4 \) f- U# M+ I7 SMODULE_AUTHOR("Tronlong");5 ~7 [4 r: p7 y
MODULE_LICENSE("GPL");
1 }4 \ O* T: F% h; n! `1 a& p% _5 G; N" N, r2 Z R& s
|
|