|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& k2 W) B' d! q' ]+ L. ?7 V#include <linux/init.h>3 {- S- P4 ~: o$ D( e9 Z v
#include <linux/module.h>* }4 U3 K" W \/ a8 D
#include <linux/kernel.h>
9 T. ^; q! j& M$ t2 U#include <linux/types.h>
a) z+ d3 M6 S. n3 Y#include <linux/gpio.h>
+ P# O- b: y2 ]9 ? t#include <linux/leds.h>
3 F( y( P9 u$ ~( W#include <linux/platform_device.h>4 F1 o5 Q& W8 u: t
4 W2 N0 g9 a5 P; C8 D/ g3 H$ G0 d#include <asm/mach-types.h>. ?8 U8 v/ g- \( q \/ ^/ S7 m% X
#include <asm/mach/arch.h>
- e! \# T0 @' G; R* {" s4 R#include <mach/da8xx.h>
' }" Z+ P2 ~6 e8 Y0 ?/ p: T1 R1 p, p#include <mach/mux.h>
& _ ^8 G! r ^( t' O5 k( K7 I" W/ _( ^& _; A; A7 b6 J; U
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 x$ i0 e. X0 o0 P( r+ ~% l/ |8 \
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). Q; _+ a# ^; v" s
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" F/ K( S% ?" Q7 C& _#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. E/ s' K6 m4 S; ?( o0 @) T9 a) |% b9 h W+ C3 P# E
/* assign the tl som board LED-GPIOs*/( T. _ r% L, _+ L
static const short da850_evm_tl_user_led_pins[] = {
/ K6 `/ @3 g& x. B9 N. x /* These pins are definition at <mach/mux.h> file */, i4 J3 c0 S! `) [- w' F- ^
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 y& k# f- U1 V* d0 C0 x. [ -1& E+ d& _+ e9 s+ [% w
};
5 l0 ~6 w! Q/ T7 x4 o9 R
8 `! m3 m& W+ [' T+ Q X5 T* Lstatic struct gpio_led da850_evm_tl_leds[] = {6 c( W Y8 { u, w1 ~
{9 K9 T3 R, }) r& a/ M6 j
.active_low = 0,
/ { b- Q& K1 W5 h5 K .gpio = DA850_USER_LED0,# O. `+ n3 `/ P3 ?2 c
.name = "user_led0",
. q: I# A% L6 g! j6 _' ]% O* \' { .default_trigger = "default-on",' T# Z: `' m. N% \, _: A4 j
},, k! g5 i, `8 Y& _! D% p4 s
{5 k7 z) S' S3 M5 L: z
.active_low = 0,, H8 T4 f. o: R: ]. t
.gpio = DA850_USER_LED1,
2 B2 L* ?- B+ x) W6 Q3 v .name = "user_led1",7 p1 H( n/ K$ U5 u0 r+ N8 ^, N
.default_trigger = "default-on",% d' Q; R4 ?4 d/ o
},
& r0 i4 A9 r0 w* F4 [0 C3 _ {% ]2 q) m* k- {2 B d$ e
.active_low = 0,
7 v9 K$ s& e1 Y' E& P' m5 @* Z .gpio = DA850_USER_LED2,
( g- I) Q. l! U( j: S" A7 o+ n .name = "user_led2",
7 t: ?* o6 I# r. q .default_trigger = "default-on",
9 E" m- [" X; ]( K$ g },
9 Q; V$ ] z2 \' [# X; q, W {
: M5 w9 E3 X2 u$ P7 t% s .active_low = 0,, a% Y$ j: s- v% z2 i% E% @) K4 ?
.gpio = DA850_USER_LED3,& {5 p( P, O& c5 \* _$ N
.name = "user_led3",
0 c% y' c9 m8 a, ?) p) [' |- V .default_trigger = "default-on",
6 Y+ n/ r# @/ Z8 d }," O' P8 W7 W% R; U8 v
};! Y$ {( Q$ Y- Z0 S$ o: \% R% C
; z1 b. i; C( @7 f Ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% Q2 C7 E" i$ \8 E' d A .leds = da850_evm_tl_leds,
4 Z6 s! s. c0 w1 a, h .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) i2 r, G# N6 o' s6 A};( ^* E9 @, S _7 s! J" B% X$ s# C# ~& y
: T8 Z# ?% j$ I- `static void led_dev_release(struct device *dev)( C/ |6 Z) f9 q
{
4 c1 i1 H9 s( X4 w9 e; Y0 L7 |) p};$ D+ E9 p1 m) x+ P& E% g+ {! g
4 O& W9 W, H" Z
static struct platform_device da850_evm_tl_leds_device = {
, U- m3 a* R) g3 [- Z .name = "leds-gpio",9 D. p& e; O) I& i) e7 Y3 `6 K# j
.id = 1,
5 }' C$ @ ]5 ]2 f5 A .dev = {% c1 v4 m; i& g7 Y9 \
.platform_data = &da850_evm_tl_leds_pdata,8 v3 }- Y( A: Z `8 y
.release = led_dev_release,2 p2 K; w9 a# R- [
}
! R1 @9 a, t1 P) a& M};
8 D/ M- d8 n0 r$ p/ F7 U2 ? ], ]& ~: Q9 z; a4 D* z
static int __init led_platform_init(void) `8 w) q6 t2 @, n9 ^
{
& B7 `; M3 j) t+ T2 W int ret;
( B1 `5 t, X" {& e# n#if 0
/ f& ^( O$ ~) d- A9 P6 @5 Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& ?' @" z" T3 l. r/ j- [ if (ret)
6 Y" N% {2 x( Z# C: K pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" J- f" @+ }- D: B8 b "%d\n", ret);
3 W2 D+ i" ]% b# v#endif
0 _' T1 P9 ~* ~/ W ret = platform_device_register(&da850_evm_tl_leds_device);* B5 d/ [% N ^2 u9 n' W
if (ret)+ J: X. z R$ H; y
pr_warning("Could not register som GPIO expander LEDS");
! e! ]* w) ~& n% n/ ] else
) i# r+ S% ~% O: t& }1 [. k2 {: ?5 N# _, W printk(KERN_INFO "LED register sucessful!\n");: @- `( |; b0 ^, l6 f
" Y9 k y: c% x% ~$ j! W3 F return ret;. W- u& ]4 x# J3 A! |' C
}
" p. p0 W# d( ?5 w6 b2 U$ W" r; h' h* x1 W$ O. }7 _
static void __exit led_platform_exit(void), a3 l, ?/ e( j2 ]/ w$ B1 U: S
{/ N( c8 y5 B% w3 l8 c
platform_device_unregister(&da850_evm_tl_leds_device);
+ I' p" p* @. m' \5 l2 S5 r9 d5 p/ J! ?) i
printk(KERN_INFO "LED unregister!\n");
" j: Y/ Q {; M8 L2 }3 S}
, H' x5 ^3 l" ]9 M7 v( [" X7 Q/ d& i$ f# c* U0 @; i& r
module_init(led_platform_init);' T2 I R4 ~2 U& V8 B3 Z; ^
module_exit(led_platform_exit);0 i% [* Q$ z% P5 D% V/ A1 v' L
8 s2 D' C2 e9 v* ]& D# N7 o9 EMODULE_DESCRIPTION("Led platform driver");
9 R5 [. \5 o! T/ t6 Y/ kMODULE_AUTHOR("Tronlong");; ?: \! ]( W4 c6 X! b/ s. {
MODULE_LICENSE("GPL");1 C8 W7 ]- y+ O$ |) ?+ Q8 ~
. m8 N9 m' e6 F3 D& v& a |
|