|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! h$ h* P& a- ~+ Z n+ `
#include <linux/init.h>
( x- Z- P$ Z( n: U0 T#include <linux/module.h>
8 s9 _( }4 R# D. [1 g. V#include <linux/kernel.h>
% \% p. e/ ^7 Z4 i2 F#include <linux/types.h>
) E( ?. x! ^, d; g, t9 r( T8 S#include <linux/gpio.h>
9 r5 u- U( ]' R" W: A7 o8 J#include <linux/leds.h>* ?1 L, _7 H# ^3 o$ N4 V
#include <linux/platform_device.h>
2 [ ?9 V; k4 {$ Y" h* d1 Y3 f
2 ?$ g' D! o6 t; m `#include <asm/mach-types.h>6 f2 ^% I; u+ f# r3 D! o* E' Q# {
#include <asm/mach/arch.h>( y1 L3 i# k4 f6 j
#include <mach/da8xx.h>
5 b2 _6 S; q, N# t7 _#include <mach/mux.h>$ |0 y2 T+ M) N* E" h$ E* b
( e: O8 }! i2 o7 {' Y$ G#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 Y: J8 Z. n5 J; @
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 x; V( H' ]( @* w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 I$ x1 g+ S6 a#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 n6 \8 k0 ~, x
) s, _" H* t! V2 ?9 ]/* assign the tl som board LED-GPIOs*/
3 f9 y' F5 k- H8 _8 Q2 [static const short da850_evm_tl_user_led_pins[] = {/ s* D- `& ?$ L. a/ D3 _' E0 w
/* These pins are definition at <mach/mux.h> file */
0 [/ r1 K0 j' O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 J% P/ R! e6 [1 @7 Z -1
, T: d) p# ?# [( U};; @* C7 _5 d- C, E8 L7 Y
9 K2 Y* ]% n* B' C* i9 \static struct gpio_led da850_evm_tl_leds[] = {
6 r+ I5 M8 V& A' u5 f% S$ | {
; u, b$ x- r1 k |" e' N .active_low = 0,, T! c4 O \( ?6 H# o
.gpio = DA850_USER_LED0,, S3 | C( U" F) l* U
.name = "user_led0",
2 ]4 t' `0 x' `8 ` .default_trigger = "default-on",
6 s) `& [2 Z; x/ t3 F. X },
4 m! q) L, a0 s- k* F {! e2 t" h; M# k+ q7 ~
.active_low = 0,
/ E# Y! \0 }6 E0 W" J8 W: Q$ ~ .gpio = DA850_USER_LED1,, I) X1 r) `# |' s% u1 J% o2 | ~
.name = "user_led1",
2 I2 c& k) E y; M. f( b .default_trigger = "default-on",$ G& f6 C* g' N
},9 M3 N0 `2 ]# B e# a# M1 r
{
' U2 Y& e, ?* Z* P( e .active_low = 0,
3 r# O! f9 A! h .gpio = DA850_USER_LED2,( Q0 z$ t2 ^: \9 C
.name = "user_led2",; G6 d* M" }' z5 F( b
.default_trigger = "default-on",: {/ s. F& R- d% f- U
},
1 u3 n0 o( i. R( d9 D; B {5 V* Z" D- Y# ~1 j4 ~2 J/ u
.active_low = 0,
! y% y# O* C4 F/ | w' X2 B/ L .gpio = DA850_USER_LED3,
, P4 `2 K4 b9 r0 ~- ]3 r% N- S .name = "user_led3",' T0 `! Z+ H8 q+ E. U
.default_trigger = "default-on",# w% I, `8 J/ y) m& N: G$ T
},
2 v7 t! z% B1 w8 z! e9 N! g};
, m4 L' j& k6 Y& j6 D( g! S7 n6 f$ N5 Q5 s6 s4 W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" ~) O# e* X! Q# C% t .leds = da850_evm_tl_leds,! k9 z6 i) V9 n1 s O/ f0 A' c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ `! d, t, [$ \" {+ l, |/ ^# w
};
4 T, y; e8 h) c; }( d- q: ?/ K$ y3 Y2 q; l& ]/ G
static void led_dev_release(struct device *dev) z# V3 ]7 `% e. ] ^: q$ r
{
2 R! o- M% x/ g, q7 s5 n};
3 Q- S8 k( ^" ^' V
& g" q9 `9 j3 Vstatic struct platform_device da850_evm_tl_leds_device = {, n d5 Z/ A: D! f ]
.name = "leds-gpio",
7 j% |" Y9 M& q- X .id = 1,7 ]0 i6 E# L. ^2 U0 |
.dev = {
" I$ U! x6 P6 T/ R3 ` .platform_data = &da850_evm_tl_leds_pdata,
. m% t0 j# u6 l/ P' @6 V9 I3 t3 e .release = led_dev_release,7 Q% R6 o! y% a$ A7 C7 n& K% x
}% m' W7 n: r4 f
};( d5 h1 @" V9 I. z# ~8 P" g
( d8 W+ [6 ?8 t; f* H# W- B
static int __init led_platform_init(void)% ~4 l! y/ N0 x; V& j/ [8 S& H
{
6 B" S9 U: b2 X9 M3 P int ret;! k; f% f! B' S$ U
#if 0 c; |* G, Z( d
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 ` v' ]* a! r) Z; {. V* m- U
if (ret)+ M5 X, B2 Z1 P
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! a% M; i7 Z) v( n$ p "%d\n", ret);
- {( E4 X4 k* \. Z" `. D9 W#endif9 `7 y" Z2 B t- b
ret = platform_device_register(&da850_evm_tl_leds_device);, ?7 U A' b! l4 k/ W& S
if (ret)
$ S& }' v/ A7 r8 p* e pr_warning("Could not register som GPIO expander LEDS");) \8 @ D9 c' t |8 o6 c
else
7 ?# a w9 X9 B% _* ~ printk(KERN_INFO "LED register sucessful!\n");
+ M5 G: B+ H1 a7 t) [
, y+ ]$ |! r; c( ?" m4 ] return ret;
! {- u" Y0 @1 B4 ]! Q}( O) R# T2 L7 p% v$ V" H
0 T: R2 k# g$ d& M' \
static void __exit led_platform_exit(void)
# r! C A# X, F: n' `4 v- s. I5 ?{+ t. Y! k% W3 A2 m6 X V) \7 Y8 R0 U
platform_device_unregister(&da850_evm_tl_leds_device);" T* s* N( e" D# v8 _3 Q/ E
4 s7 I2 Y- n) t0 j- V printk(KERN_INFO "LED unregister!\n");
4 J8 ^; P$ i& I5 M7 M9 p& q}
5 {. i/ n- h$ l+ p& k5 @5 \) x! C2 ] m2 i
module_init(led_platform_init);
" N! ~2 s% X0 _module_exit(led_platform_exit);
- T3 S9 V8 o6 ~1 ]( }0 c" T7 B: [5 k! _# p. b# q1 c6 C7 J
MODULE_DESCRIPTION("Led platform driver");
: R5 A7 b" ~- P8 {* i0 R" a: dMODULE_AUTHOR("Tronlong");4 q# u" w0 |2 r6 ]6 u$ y
MODULE_LICENSE("GPL");! b3 w. H0 V+ h1 S. z. X
1 V/ C5 ^' m& X
|
|