|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 f# X+ W1 @! C3 d/ X#include <linux/init.h>
; H# s' F/ g$ V#include <linux/module.h>0 H! G5 U) Z. G
#include <linux/kernel.h>0 w8 u. U# b7 h* }% H: P
#include <linux/types.h>
- P6 m& P. V7 J/ O1 I0 w7 q4 J#include <linux/gpio.h>
# Y6 W3 ^. N/ B; }* C& p q#include <linux/leds.h>$ P0 f$ N# u4 O# Q8 s
#include <linux/platform_device.h>
, X2 m4 n8 Z2 [! i, v, ]
# s; r$ I% E) U# s" F) C0 @8 {#include <asm/mach-types.h>4 _# s6 x2 s* s. Y
#include <asm/mach/arch.h>
! f! W2 F, Y; p#include <mach/da8xx.h>9 l* j8 E6 ]( k* T
#include <mach/mux.h>) o/ L1 j; G& r. O
3 Q: ^1 a5 `6 c& Y# S
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 Q# Z& R2 J$ \. ?9 j, _
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! F! O1 p# Z9 f# J1 _% V- H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); f( Z2 ^3 W: c! P; ~& T9 } i
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) ?* J& \" T H0 l8 S
8 j v% v$ k6 [. f3 ]/* assign the tl som board LED-GPIOs*/
# p& w) B3 o/ O& u* Y8 kstatic const short da850_evm_tl_user_led_pins[] = {9 I. i" G1 e# S# A* h8 Y* w
/* These pins are definition at <mach/mux.h> file */
5 a4 i" i* |7 V3 }/ Z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* z; z* k7 H/ }; j4 x! E) I -1/ Y$ G! X* B- k) A+ _
};
# T, K8 F" d. N
8 M1 E+ z# j7 |& mstatic struct gpio_led da850_evm_tl_leds[] = {
8 U% E% I) m7 B- p3 @ {
% d0 y6 x0 @1 s .active_low = 0,6 [$ Z a5 K' ?9 ~# T Y
.gpio = DA850_USER_LED0,1 K7 b$ m8 d) ]+ o0 q( |; l
.name = "user_led0",; y& s) B% x0 a9 Y. f+ U
.default_trigger = "default-on",3 ]) n- B$ S- ~" K* U3 ^0 b: B! {* t
},
2 ?7 i" P8 b( j* G {
# ~- ?$ e! ^4 r5 s4 J+ Q: X .active_low = 0,7 R; t) F- p' n+ D
.gpio = DA850_USER_LED1,6 t. _7 `! X+ m( ^# V
.name = "user_led1",
+ t7 x. f5 F6 U- k' c) ~ .default_trigger = "default-on",
, q, i* Z5 b( e/ X0 {' p },
4 ~0 k1 j/ A' u0 B' v- W. f {( F! C& C+ l* }3 `$ o; P
.active_low = 0,- Z, Z2 Y$ g: G4 Q
.gpio = DA850_USER_LED2,
) G: W/ X1 ]! I8 N+ ~8 M9 E. ] M .name = "user_led2",( L) b& R" K8 w/ q+ d
.default_trigger = "default-on",* y& m2 l; q5 r6 r% ~
},
% f4 ~1 d8 _) {0 L! ^; |/ C {
# f" L) M! q; a+ G" d( B8 Y% \ .active_low = 0,
, Q" w: ^# D' T/ V .gpio = DA850_USER_LED3,
/ w3 Y# z9 |% @0 g3 z' k' r0 ?0 w) ^ .name = "user_led3",
- B. o c) a$ ~# q, N/ ?, F .default_trigger = "default-on",
& `. ?, D+ @0 r* ]1 O f9 Y0 j8 \ },
G4 A4 [% V3 m( a* r2 S% O};& V6 F C% g5 B" c5 y; H
! V1 }6 g: @6 C) h
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* [: t# d& Z$ \& u .leds = da850_evm_tl_leds,+ K) L$ H8 K6 \* s( y( k* m/ \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 w( s5 F8 X. E6 V2 Q1 _
};
' M0 B% |. B0 X% H6 l0 D$ q6 C7 d# I3 v+ @+ s; ?
static void led_dev_release(struct device *dev)
4 ~/ M3 A0 d, g, Q2 O" i u0 ~{- ~$ C1 z, \8 Q( t- k, `
};
5 w1 R0 g- l) K7 }4 F" y
$ e: @# _. G; P% u* f2 ^static struct platform_device da850_evm_tl_leds_device = {# y& I H1 o; R$ M( f
.name = "leds-gpio",/ E1 s+ c9 a' e; o8 n: t5 k; m
.id = 1,
( [# R6 p# @5 q2 }+ m' t7 |% D .dev = {
% P9 l+ d0 b, e' p0 [ .platform_data = &da850_evm_tl_leds_pdata,
5 s4 V1 G$ E9 c) _, P8 v .release = led_dev_release,! T( u1 P2 b0 l/ _
}4 s& R) W2 c: `6 }( S: p+ |
};
' X% s f8 t$ I" |% ^% U- A
) |4 _. J, h; ~6 E. a N3 u. ^static int __init led_platform_init(void)4 H" B' y1 z6 d2 v% B: u
{4 a1 E. {* A( D, Z+ I
int ret;
! ^/ i) G9 [! R! n3 O& Q6 x#if 08 _* F5 {( I' X2 B3 O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& R; u8 Z. g& E7 P1 x: A& z
if (ret)
1 R3 W3 b9 H2 g: x% d& Q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! g( _0 u: G; d "%d\n", ret);3 j1 i" C! M" C* r
#endif
W) n# Y! S9 H. F8 K ret = platform_device_register(&da850_evm_tl_leds_device);5 O! e1 k A' M3 b& T& H
if (ret)6 R$ m' A8 b4 I7 U
pr_warning("Could not register som GPIO expander LEDS");
' c5 K0 V3 K7 E8 m else* @" u) w; r. \: o. A
printk(KERN_INFO "LED register sucessful!\n");
* \ b9 i7 U: c8 ?, H6 s8 f3 S' z* k/ @3 l* Q/ F0 ?
return ret;
- ^ f$ u) H2 c}
! F' t' p. G( ~
) h% X( W1 C! G9 F; u5 Q. p, ]static void __exit led_platform_exit(void)7 C: u& Y7 L+ T' N" k6 ]9 B4 L
{ Z, k$ w- ~1 d5 R: G
platform_device_unregister(&da850_evm_tl_leds_device);7 i7 M( T1 F) c# \2 b
. J) m; ~" w8 Q
printk(KERN_INFO "LED unregister!\n");
1 e' `% ~6 a# w. v}
( N( A+ t* Y, F& H, I9 {- @2 w6 J/ G5 J* U9 m9 l9 k
module_init(led_platform_init);
3 v9 E# p! k' @" S4 o$ O% P: g+ ]module_exit(led_platform_exit);+ h* V3 ~3 N9 ]0 o, y3 g
1 j" {- e9 k x2 IMODULE_DESCRIPTION("Led platform driver");( G# S- {# u1 t7 W5 v6 m
MODULE_AUTHOR("Tronlong");' t( @# {# o, x* j
MODULE_LICENSE("GPL");
' @: V( e$ s# f4 [: B6 S: j4 d5 ^7 c
|
|