|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 \" g. @2 R" r7 g#include <linux/init.h>
/ @+ f9 ?1 @& K; F7 S7 B7 H! l3 `#include <linux/module.h> x$ ~& C6 T2 ?" i
#include <linux/kernel.h>
3 K" {/ i9 s& ]. G#include <linux/types.h>
& E' [" a- f" C& o/ R#include <linux/gpio.h>
/ v2 Z0 w3 }- z# |2 }: Y. A; X6 ~#include <linux/leds.h>8 x3 ^+ E1 T% m
#include <linux/platform_device.h>/ }) S. O# F' g+ D
1 L% c8 x! K* [8 W+ U
#include <asm/mach-types.h>
4 O$ j$ H) Q6 J: @+ c/ i#include <asm/mach/arch.h> Q3 {. f+ j* ]' H3 _3 _# m
#include <mach/da8xx.h>
# Y1 |/ H {" W' c3 L6 \. H! g, {* E#include <mach/mux.h>
* D/ Q! A" }; j6 H+ z$ @; v" m Y- E
+ ?: q9 d# M% a2 r- ?#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 s3 k# U, N# d% g, z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) D5 x4 r2 r( _* N9 ~
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# W1 z4 z5 d2 i
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 P" _# ~) l9 P& I! c
; L7 U0 J* a- M6 L5 o0 B
/* assign the tl som board LED-GPIOs*/9 o# L4 Y: _9 C! a! E
static const short da850_evm_tl_user_led_pins[] = {
( T5 @1 W8 V" t" I/ g3 z$ y* ? /* These pins are definition at <mach/mux.h> file */+ Y1 e9 x; A, m: \( ^ ^4 l. \- J
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 X( t ^- ~4 T4 n
-1
7 h7 F) o; q2 c; V1 t) `4 o5 d}; ]0 A! h/ O. ?* d2 I; Q; N. F
; k* E, {! T, h/ \$ F) @( ^' k
static struct gpio_led da850_evm_tl_leds[] = {
8 v, K5 K! \9 a: c% E {
% H d- o2 M0 c2 r .active_low = 0,! R- T8 j. y1 n/ K" u" }
.gpio = DA850_USER_LED0," n- a- g. r: Q2 T3 f1 f3 X. o7 A
.name = "user_led0",
+ j$ e# T2 Y4 L, x! x& Y- v .default_trigger = "default-on",, b% Y5 M: p$ O9 X' S' p! s
},
1 Q3 G' Q1 ?$ A+ e9 [% Z9 \ {% ~( n/ X5 o3 `+ |
.active_low = 0,
6 j& [( v n( V- G v- x .gpio = DA850_USER_LED1,$ J) i+ ~$ W. i4 D- w
.name = "user_led1",
3 T. H$ P9 N7 G( r( S0 u .default_trigger = "default-on",
5 m- J5 Z8 D! c1 i },
# ? ]3 b0 q3 Z1 s- A5 c {
; L! z! O0 V* X) y; e H% W .active_low = 0,
. o/ B) U" A. k5 K& A$ j .gpio = DA850_USER_LED2,9 z$ G, i# D9 _3 i: }1 b
.name = "user_led2",
' j9 c# a# @/ L1 C) l! y0 N9 M .default_trigger = "default-on",
3 A. E" N& \! L+ O% [ },
: }4 z; ^- I# l( Y {
! d' ~. i) z& b2 K" u. l# ^ .active_low = 0,
: U/ O" a4 y4 m) d( A. \9 L7 ~ .gpio = DA850_USER_LED3,
* ?. W2 G& S0 e .name = "user_led3",
8 w( E$ ~: X9 M5 i. u2 x9 j1 l .default_trigger = "default-on",
8 b* M- ~1 ?2 m! d },/ S! ^" a2 z9 d7 a _5 p
};; h d. [0 d$ G( {( ?. o6 g7 `/ r
8 C& o A* i7 q/ b# Y4 y5 p# |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( w( h0 j( _: J! k .leds = da850_evm_tl_leds,$ |2 Q& o1 q# r$ `8 D) r8 ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ J0 _- [! v1 d
};' h( D0 N" E8 W0 F8 m
, L' @; r" I# m: L; d* D! N! y
static void led_dev_release(struct device *dev)
- n+ {6 ~$ ~( R{. d6 i( _0 [* L% f: Y. S. f
};- @* G W' _6 R$ Q$ C% B
2 d' [2 s. c( W: w
static struct platform_device da850_evm_tl_leds_device = {/ c& H1 N0 h* ^
.name = "leds-gpio",
# E1 ^3 K5 j) M1 V- D* M .id = 1,
6 a$ s, H9 U) _7 o; g8 R+ K: e A .dev = {6 } H* z" `# l2 n' E* ?6 G7 H
.platform_data = &da850_evm_tl_leds_pdata,
$ Y6 e# k" z5 d .release = led_dev_release,- {0 s ?& m/ x k
}% [$ i& c' f4 Q9 w
};
2 U( L+ U' S5 n+ J6 X
2 i9 i' I8 G- {; @2 D* g" k! _static int __init led_platform_init(void), l- J2 k" c- e
{
& P K9 \0 J5 N% C; N/ e+ G6 D int ret;: S6 X' r4 b- x* b( `( V& I
#if 0
. K5 M' \6 b5 r, ?( J( w' z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# f1 H3 h. h+ a$ ? b u
if (ret)
' @/ J. [ H/ d6 e S pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% I% q# s/ f5 I4 @
"%d\n", ret);
4 F3 m! I+ S9 o9 h' V7 a#endif# P+ E7 a' X& K$ s# `) t- {8 Y+ X/ _4 t
ret = platform_device_register(&da850_evm_tl_leds_device);
* d3 ^5 B6 A/ y/ C9 M) u if (ret)' D: B3 e* d# _& F( i
pr_warning("Could not register som GPIO expander LEDS");
8 W8 V" j6 B8 c% h; o' ~ else
c0 ?6 z# d R8 B# B) l/ i3 p printk(KERN_INFO "LED register sucessful!\n");' @& l, C: [. A0 T5 S
* |7 v, P# E2 c1 A) [1 ?! h return ret;
+ b2 g/ Y! \8 W6 A0 ?- Z2 T}- z7 p( C+ N$ [( H- ^
% s* ] l8 t. F% w6 Q( @8 E! p* o% s; Ostatic void __exit led_platform_exit(void)
# l6 ~5 ]% I9 I; ] s; R, B! }, Y1 H{
$ J: L o, K7 z& H; W7 ` platform_device_unregister(&da850_evm_tl_leds_device);3 _$ s4 o6 g0 l' ? O
/ F3 p3 }& J3 h E
printk(KERN_INFO "LED unregister!\n");
9 g' b @( J9 b; t" T. I; j}4 g P K, F/ @$ k6 J
6 T' o7 z$ u& R% } n8 emodule_init(led_platform_init);
" N9 T$ `3 u @- e8 E0 \8 xmodule_exit(led_platform_exit);! w- F# X- k7 D8 ?+ ^: M0 e! `7 i
) d1 D, d! h" d0 L
MODULE_DESCRIPTION("Led platform driver");
7 a; v9 r4 x$ ~& X; Y X5 hMODULE_AUTHOR("Tronlong");
+ X2 L* b7 w8 E, s1 r* JMODULE_LICENSE("GPL");1 |2 M" C5 ~" h
) w# z% I) @ A6 ?" W
|
|