|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# V# A2 Z W T' m9 C& g) g#include <linux/init.h>- F* ]9 |1 M- ]8 f- ]$ m: @' }
#include <linux/module.h>
, d: ^; B) m7 \8 s7 Z#include <linux/kernel.h>
# o2 G! Q9 t# X% s#include <linux/types.h>
' h; R7 k& x* i0 k3 b; H#include <linux/gpio.h>. G8 k4 o9 |/ ^5 A( a# `. E- L
#include <linux/leds.h>
0 x0 F6 G; s/ P6 x9 g" H" t#include <linux/platform_device.h>
! x3 U' |+ ~; a5 l
0 q" ?& V& T2 d#include <asm/mach-types.h>* l- s# a) C( L3 W H$ A5 j4 I( ?
#include <asm/mach/arch.h>" Q. ^3 {# `, P1 t) g
#include <mach/da8xx.h>
3 F$ \4 ?/ A c$ K, Q- B% o a( p#include <mach/mux.h>4 Z! P) ]0 S& v* q( A0 c; m, z( r( K
8 P7 D: A* t1 R: M0 M
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& F. U5 M" r- C8 b
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 ~9 W0 C7 X- r, o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. u1 r( M( y( |. C1 J# M! ?5 ]: Q# h1 E#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ B5 U- j a8 F4 W
- f% D3 q+ |, H2 R. ~2 w/* assign the tl som board LED-GPIOs*/8 R; d2 ]% M: T; a$ i1 v
static const short da850_evm_tl_user_led_pins[] = {; \% h4 v# S0 K$ D7 I/ ], a7 T2 F6 U/ a
/* These pins are definition at <mach/mux.h> file */
7 p! d0 w' x! p7 L! Z% o3 z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 Q0 U/ R5 }3 a- P -1
! l& A- T/ B6 |' {};- }- J$ V1 X8 C
2 b( [0 y# z5 Z9 ^
static struct gpio_led da850_evm_tl_leds[] = {
% ]. i* g% T3 n, B9 w {
$ z% h6 ?2 n1 e2 } .active_low = 0,
$ J: B3 Q$ L& r& S .gpio = DA850_USER_LED0,
/ a0 ~1 l8 N; x- N; L( x& G. J .name = "user_led0",
+ U1 r. f, ]# H8 q+ B( L a6 Z .default_trigger = "default-on",7 O( e: Q" q* y
},) M% o( P8 \; u" m U
{
: ]2 A, q$ G1 q) z* Z; k3 q% ] .active_low = 0,
) h) D: X! z' `0 r) c7 ~+ { .gpio = DA850_USER_LED1,0 U8 e6 q) b+ P( X7 X R
.name = "user_led1",
. r) Q' U* A; S! a4 k8 Z* g .default_trigger = "default-on",8 G5 }8 B# \( o' ]% G* Q5 _
},5 r# t/ o* G- u5 e: y
{
# S# B6 q# D+ n7 o+ q! f* z* D .active_low = 0,
; }5 L) S2 P6 J J4 x/ X n9 d U/ C .gpio = DA850_USER_LED2,
a8 J9 a! b; g$ w, x .name = "user_led2",
2 \7 D3 e0 y/ ~, Y4 T' v- o1 L/ Q( X .default_trigger = "default-on",$ C5 r& u% [3 L/ m6 a
},9 w( I+ i( l% l! g' h
{
* O+ c# Y7 N. T2 ^0 k' z/ D8 c4 X .active_low = 0,
9 [- F3 i2 A- j# N .gpio = DA850_USER_LED3,
5 }# R. u- t$ D/ f9 f .name = "user_led3",/ P9 D+ {2 ]- x) _& l1 y9 }3 u7 P
.default_trigger = "default-on",3 ]$ r" _. T4 t L3 P2 F+ j, K) Y {
},
2 y/ A/ S0 ~! N. H2 I# W; t$ w1 n};4 r6 g; d( O; I. n+ p, L! \
# Y7 ^1 |' J4 l2 n& ]9 Zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. J) l# h3 {1 A4 n& F .leds = da850_evm_tl_leds,
6 d$ n6 @1 z7 B( X# r3 ^9 J .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 O, g" C, I9 j+ x7 y5 D
};
0 ]* l# E7 m% I0 u: v# B4 k, Y7 P1 h) O- g0 a9 @- Q
static void led_dev_release(struct device *dev)9 R e) T! S3 g- c6 x3 b
{
1 S; i" E% R3 x" W/ q U1 v5 `};
% W5 q' h2 `3 P) A8 q" R! l1 l( ?1 ^/ E0 G' d: _
static struct platform_device da850_evm_tl_leds_device = {+ q( i( B2 u! y" b" b; n g. N
.name = "leds-gpio",
# `+ |# g0 k' G0 d .id = 1,
! _* }+ z7 [$ a. K- ?' K1 s .dev = {
( c9 q0 B7 U5 C6 G& } .platform_data = &da850_evm_tl_leds_pdata,7 o1 V, z D% t1 S- }
.release = led_dev_release,
`+ j# m( @4 M D4 V }* G; ?- b! R4 c1 s
};7 J; J+ n* C( j8 q
) j# B; y( ~8 j2 Kstatic int __init led_platform_init(void)
# Z. S& u0 J. r3 w- J, ^{8 U: e1 A+ ~9 ?. ^
int ret;& Y# x4 u& C2 N" m7 h7 I% a
#if 0
# U3 D) G' g8 o/ Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- M; a5 [5 s: }. c( S" V% }7 M, v& H if (ret)& p" D: ~' ]* P6 \& P, i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, n, Q$ t4 }9 a7 ^ "%d\n", ret);
5 D1 D; ~, x% I# m. @2 F% Y#endif. |+ I) b* e0 [9 I+ Q0 x
ret = platform_device_register(&da850_evm_tl_leds_device);
% o) ?: `5 ^0 P: Z2 K# ~- q if (ret)0 {8 }3 Q4 f6 x8 P+ x
pr_warning("Could not register som GPIO expander LEDS");# ^6 s- w$ D# f2 W* X$ H+ S
else
! ^0 n! I5 N! ]/ k' s- Y, P printk(KERN_INFO "LED register sucessful!\n");+ d9 A1 B; x* Y# g! J+ p+ E
- B8 d' U: D) L$ x; D t6 V
return ret;: a- G' o" z" v0 t* T) y
}
& G: D$ L, M' n+ B$ O, A5 }: d9 ^- m( F+ e) k
static void __exit led_platform_exit(void)3 a& H" L* Z+ P
{+ N( a# y: ^' W! B/ z8 `" s2 D
platform_device_unregister(&da850_evm_tl_leds_device);
" [( Z$ D! @4 `( C, D
9 V% I2 u: z+ p printk(KERN_INFO "LED unregister!\n");
3 b6 P' p- H0 }, W. Q& T3 m}
3 A6 `) `* F+ j! I
1 p! }' U8 C( L( Rmodule_init(led_platform_init);
7 R3 Y: Z( U% q. \module_exit(led_platform_exit);
( k8 E% w- w/ k/ e3 U* A y I2 m% J
MODULE_DESCRIPTION("Led platform driver");
& C* g, w5 W* IMODULE_AUTHOR("Tronlong");7 q; b9 v) A& v) g8 J
MODULE_LICENSE("GPL");( ]5 U' f! I3 _- J
' r3 f% l8 q" O/ b0 e; x; b |
|