|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ P' P! x/ S! T7 m* l. F! Y
#include <linux/init.h>
9 {$ ~; X: b9 v$ d& b; Y#include <linux/module.h>6 k/ e3 R. I1 R' q; Q
#include <linux/kernel.h>$ ^) H6 A, |& ~, l$ M) s
#include <linux/types.h>
) |1 t. h& a% @+ D( i" ~6 r4 h6 w#include <linux/gpio.h>: O% F! q T- K* T/ w
#include <linux/leds.h>
' q; {8 H- m( H+ k% y. @4 R" L, V#include <linux/platform_device.h>
8 m( p; G L6 \
9 d3 p5 M8 x) [+ n: p: u8 C* ~#include <asm/mach-types.h>
* M( |& E, p, j$ h9 e7 `#include <asm/mach/arch.h>" y) n- J7 @, |1 W5 h0 Q5 J! M$ t
#include <mach/da8xx.h>
% \. L& s" F7 z#include <mach/mux.h>9 g) A% [, D1 z+ k$ Y
; g2 p& c6 V M5 U& s0 Q1 [; _% c#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! P/ r9 X0 ]1 R& Z1 w: j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. U$ @, s6 v! Y, F. A+ P- e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; n& p+ r6 y3 E#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 z$ {. _" Z0 Q
, X( \9 S. u) Q: Y- ?. T; o# L/* assign the tl som board LED-GPIOs*/
* J* a3 @, ?, Z3 g9 Q+ Q8 p/ ostatic const short da850_evm_tl_user_led_pins[] = {/ l/ E% c: S% d6 j8 D" E: c4 w
/* These pins are definition at <mach/mux.h> file */8 z2 D5 j0 E3 Q2 k' @9 a8 m7 X
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& p x$ \. q t6 x7 Z' Q# C _8 ] -1& _* J3 j0 d6 p& ^
};
1 r0 J; y6 W7 y' g' e4 \% m h W' z8 U* f$ k% I% b
static struct gpio_led da850_evm_tl_leds[] = {
0 @' P0 g4 v; A9 Y2 k. {7 f& i* ?; | {* V& k4 f3 w+ X7 [+ i6 q
.active_low = 0,# T# t3 g& q/ q! a
.gpio = DA850_USER_LED0,
- `' B; v; r; \5 J2 M* r3 z0 b .name = "user_led0",; B9 H. W0 H0 Y! I9 F3 `! O3 k
.default_trigger = "default-on",
1 Z8 M+ ^- G( R },
& S- v2 R0 m" ]4 K# v {
5 M- f9 Y$ B! Q8 k( W# f- c5 i .active_low = 0,# T+ y' b, A+ ? y# ]
.gpio = DA850_USER_LED1,
3 S; q8 [/ Q2 r .name = "user_led1",
$ L( q+ M, U M$ B .default_trigger = "default-on",
9 { q* p% T: } u },
|0 C+ e h1 Q6 p% V. ] {
: ]* H% f( \# O& b @: m% e .active_low = 0,0 U% `, Q( w9 U
.gpio = DA850_USER_LED2,
, {. W4 W+ `% `2 J& ~ d# U .name = "user_led2",
Z6 z- Q: ^, Z .default_trigger = "default-on",7 Y( H* I4 F$ b6 a$ [( i. n0 j
},/ P H- A" H r; H6 e0 I2 m% C
{# a! p, T+ H) C8 q; z# ~
.active_low = 0,7 L1 e5 O% _# E6 j0 ^
.gpio = DA850_USER_LED3,
( w/ E1 C" \- `6 \ H* a .name = "user_led3",
7 P' j! n; d4 {9 P .default_trigger = "default-on",
! x5 }! M! _. J" M' v7 j },
: E0 d# D. L8 W! P7 m& K3 l};/ h% S I# d- X3 A* m( S- J
8 t# E" o0 n! J7 S: F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. X5 j- W1 O% n" p3 c2 o- ~
.leds = da850_evm_tl_leds,2 \- K% o5 y% p7 F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds), x9 R3 \% _! L4 o6 Z5 W
};0 b X* U1 ?6 C1 V
- R7 N9 n. x6 L% R( Cstatic void led_dev_release(struct device *dev)
8 h3 x4 a; z# N. l0 |! K{
6 M! v/ t: C+ {" U& q};
. ~2 V9 I9 S5 O
4 b8 [) A! d0 Z8 s. _3 l* _static struct platform_device da850_evm_tl_leds_device = {
3 r* m+ G0 A. Y: C* F .name = "leds-gpio",$ l, v- p- R- ~! j5 n; U
.id = 1,' o0 L4 ]- c% I5 W p/ C
.dev = {& C& F( K8 [8 ~1 J9 f
.platform_data = &da850_evm_tl_leds_pdata,9 n: F- r) f# r% [
.release = led_dev_release,$ @: }8 r& Q8 T3 Q/ }0 {7 |% _0 w# I
}
! G6 o) H y( T K};7 [5 P! G9 m, A1 b) u# {0 P
e( D8 _' Z5 s' Astatic int __init led_platform_init(void)7 {/ e% W4 U% h/ i5 Y9 y
{4 G: ]" u+ U% M& [+ U+ @2 q
int ret;/ D E/ J" [2 k2 F: ] Q
#if 04 M) p% q1 }& ?1 J& p+ v: S7 a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( b' e: I7 a$ J# Z# i
if (ret). K0 G, c F; |+ X2 K( o' n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 u8 G# V* k# [2 ]( ]6 K* h/ ? "%d\n", ret);
. }3 Y4 f# T% i; b& }; e#endif
6 l1 A+ Z' d) u! a ret = platform_device_register(&da850_evm_tl_leds_device);- R4 p r; F" b+ c$ h' i8 G
if (ret)3 {* q" B' m! i$ {
pr_warning("Could not register som GPIO expander LEDS");" d- P3 [/ G A- K G4 k
else
1 \( a$ R1 O9 \1 w: w printk(KERN_INFO "LED register sucessful!\n");
* @, v* e# C: z* k m2 A
. E8 F/ Z& t1 r8 [8 G' i return ret;
8 ^: o, T- t) |2 B3 ], h. y- j} E, C9 n/ X- B/ C
2 `( X) T& `% o, Z! R
static void __exit led_platform_exit(void)
! O- X7 e8 f- k8 v" N8 Y; \9 M{
; g1 W7 k( D; x platform_device_unregister(&da850_evm_tl_leds_device);; i: u0 a* z5 B C
+ B+ z1 R. t( }6 I8 }7 o6 j; }9 V5 H printk(KERN_INFO "LED unregister!\n");
9 N# B8 A G3 Q$ ]7 V0 Q7 f5 h}' J% `' `% @( X2 ~" U
: L. O/ G' s! ?9 Z0 i1 j e( @4 f
module_init(led_platform_init);6 {: N' O2 ?7 d6 {" u
module_exit(led_platform_exit);$ h1 a2 G; m. Y
7 h9 D2 w4 W4 {+ v( _MODULE_DESCRIPTION("Led platform driver");3 u z9 u" q- H( |
MODULE_AUTHOR("Tronlong");. G$ F- }9 w8 w) U; f: Y
MODULE_LICENSE("GPL");+ F5 ] c( e4 J& m8 l t6 L2 ^
' p2 w# m# Z* F7 b% A' R" b7 U
|
|