|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 I# i9 @2 ^6 l8 F: [$ W
#include <linux/init.h>
; l2 H& v5 V' E1 r9 w |0 C' F; a#include <linux/module.h>3 V, X' L2 w& a7 Q
#include <linux/kernel.h>
: W; t* w4 F5 {9 x#include <linux/types.h>, \/ K8 M7 v4 m9 T
#include <linux/gpio.h>; s( Z x- G+ J% }
#include <linux/leds.h>
' M5 O8 }% }1 i* @1 w( I( h#include <linux/platform_device.h>
0 [% e- g @! C; b5 L# ^6 b' ]
$ w9 V% X& I, H( w- p: j#include <asm/mach-types.h># r4 {; k! b* v: K; L
#include <asm/mach/arch.h>
' {! u+ t( L1 G( N& A1 T2 J#include <mach/da8xx.h>9 D* D* f! Z; \. ~
#include <mach/mux.h>7 \' D; b t7 e% v
- J* l% w8 E1 ~$ O4 M J/ K#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' \* |% [, s1 D; k% B8 m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ e+ L0 m% X$ W% a
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# g( X4 N8 q- ~5 m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). j2 F" i' e4 t' r- p& |
: z( o4 j0 O+ v/ ~/* assign the tl som board LED-GPIOs*/$ f+ r1 l- _2 J2 A! q+ K& Y
static const short da850_evm_tl_user_led_pins[] = {) y- k/ H2 M2 R7 }- @" v9 A- N
/* These pins are definition at <mach/mux.h> file */
; R2 f1 [4 V& O5 j# b1 x) u DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," T2 J) H0 t8 s! K$ A
-1
9 s3 @. I- S5 V( d};
7 _+ j+ [% B. _0 _9 ^1 v/ w3 y# Q' X) z/ D( c+ f$ ]. @
static struct gpio_led da850_evm_tl_leds[] = {8 a5 B9 D0 N" s. c% J! i5 A% J0 N. C
{/ u" `# ?8 S, m+ h( N7 |' I
.active_low = 0,
# l* `2 c9 f7 |. r4 l2 f .gpio = DA850_USER_LED0,- I0 X4 c! [" W6 Z
.name = "user_led0",! O* \) a' f1 U6 @
.default_trigger = "default-on",
9 j( [) o2 h( a },8 Q5 i* }$ G( ^9 ~5 ]
{
6 f/ O: {1 ~+ s .active_low = 0,' E( e! n. _; C6 f7 C# ]
.gpio = DA850_USER_LED1,& z( |! z; ^) j' q
.name = "user_led1",3 [! m0 G& E9 @* ?) w q
.default_trigger = "default-on",
/ x# a5 p- J' }- } },0 ^8 w7 k$ D+ u" r6 `0 r2 g- E
{
' H. C! |' d7 v, M) r v2 s .active_low = 0,
! B G& v& x+ X5 L .gpio = DA850_USER_LED2,
" v. c) a3 R) E' C) L! B .name = "user_led2",
; r' o, R X0 O. k( t. p .default_trigger = "default-on",+ y( U) `0 Q1 M( f+ o
},0 i- E/ U) x' L
{
0 E, E4 K8 \/ H# ` .active_low = 0,
+ u9 n3 q: t5 r) _$ d2 i7 x .gpio = DA850_USER_LED3,* }* P% K) ^9 p" F- O* U$ c8 U
.name = "user_led3",) b9 J! V; K5 _4 B' x
.default_trigger = "default-on",
6 w# ]3 u% n+ c3 I- Q! s },/ Z. c. |% F* M
};% _, q- j" x; H, k4 ? S
4 h% ~; @8 o. }- }
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* U$ K4 M, }2 b2 \
.leds = da850_evm_tl_leds,
8 l0 J+ h3 U4 m3 W, W) ? .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; I. r; k( k6 r( }$ {& k ^
};. i b" h; {& l5 c& T% r
* Q; h: M1 R! Z
static void led_dev_release(struct device *dev)- b0 S+ X* n" v8 I6 E) ^
{. s8 O l# z& q& X! U) v' f& [
};) g+ b* A0 u9 g5 X- x1 |
3 R9 v; }: {9 ^6 Q$ r. V3 e2 a' h' D$ zstatic struct platform_device da850_evm_tl_leds_device = {
" W, D* o# C' E J$ R+ A2 q .name = "leds-gpio",9 ?) r3 E5 N9 z( w# ?
.id = 1,
) E5 D* |) y" d% K7 J/ U& Z .dev = {
$ ?# f8 m+ R7 k; Y; K .platform_data = &da850_evm_tl_leds_pdata,
4 C; M+ V! ]" x .release = led_dev_release,
( l# {* h w: e* @4 c" X: o. w z }
! v; _& j# ]' j8 J+ A};
* v J& r& E( t, z( |2 E/ {) o5 v' D9 O6 w0 z. A4 [
static int __init led_platform_init(void)" Q( t9 S# |( q5 ~9 S) S
{2 F( a# Z4 B6 E' Z5 f8 S
int ret;0 F7 }% x8 i" ?! n3 q8 ]0 L( P
#if 0
' B0 x; X6 `5 N# J ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* a7 h# c8 w$ |3 E7 b* x
if (ret)- e; |/ F+ ]+ C! K1 m
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( w" [$ t% A* ?8 h8 O; s2 u "%d\n", ret);& \ Y: ~7 `; b2 Z; _ U- T
#endif& W3 ~' S+ D, n& ~$ W: _) z3 v9 F
ret = platform_device_register(&da850_evm_tl_leds_device);
& {: w& [% X: Q. k. U# i7 I if (ret)
7 | j7 d. a; ~# d7 B9 J& X" J pr_warning("Could not register som GPIO expander LEDS");6 Z! g0 [7 w. l% e- n
else
# x6 F& l, a& t: I7 q6 A2 W G( u2 c( i printk(KERN_INFO "LED register sucessful!\n");
# X! L A# m# K0 C6 l; T+ X. N2 A
return ret;
7 l+ L7 u6 y0 l. G}. R& ]! I8 ]( Y; A. t Q( [
- \) f& v! j% X* P9 {static void __exit led_platform_exit(void)6 X. z; C6 F' N0 p l7 k! R
{
" T7 W4 {# m4 G' Q platform_device_unregister(&da850_evm_tl_leds_device);4 y! @3 N+ G3 t. g4 K' I5 w# U
- d8 m# v" ]: f$ e printk(KERN_INFO "LED unregister!\n");
: @8 Q$ [! Z3 y$ z! Q; E5 f. D}
, `4 l3 A& q: S' J" o0 ~3 S% `- r" K$ u6 b
module_init(led_platform_init);
% a, A4 r- x; J4 _module_exit(led_platform_exit);) h R) B5 ]$ k7 ~' n
% ~! K3 W% ?" v, j8 l4 i
MODULE_DESCRIPTION("Led platform driver");( Q& C# [: E; U
MODULE_AUTHOR("Tronlong");
, t% _$ j. X7 RMODULE_LICENSE("GPL");
# z4 Z1 n8 }- Z, `- }1 e6 N/ q8 E; ]; t& f+ d% F/ F, X
|
|