|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 O7 L; J2 m) A6 r6 ^( V; l
#include <linux/init.h>
/ b! ~1 R) u7 c2 d# W#include <linux/module.h>" B5 Z8 Y# v1 Z& Z8 a( I
#include <linux/kernel.h>
# j, c7 ~! u: O, ~5 g#include <linux/types.h>
3 Q8 v& [& l+ O0 D7 I#include <linux/gpio.h>. I+ q( P( f. r2 p
#include <linux/leds.h>
1 Y2 N% m2 N. J0 p#include <linux/platform_device.h>
& b& a+ O2 p: \3 J% N/ b( z5 f1 A2 E( K# S3 x/ c8 J8 |& Q% u
#include <asm/mach-types.h>4 r4 f; {: H2 q8 `# k/ \- \
#include <asm/mach/arch.h>
& v9 F2 W& g+ @" t. L1 @' {. v#include <mach/da8xx.h>
# ]6 C9 x) z; f2 F- I#include <mach/mux.h>+ W6 z6 a4 \ s2 h* g# g4 s
' u1 V, G L# \' @: t/ q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* {7 P0 g/ ?9 `) k: C* [& Y) g
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) G6 Q9 o }( f! k0 M/ B, @' a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- ]) I$ A0 p7 o# q( V6 ]( P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 r& Y: K2 C+ K% R
6 X# }2 d9 |* Z1 Z6 X) C0 n/* assign the tl som board LED-GPIOs*/2 b1 _: d9 b& s: f, J8 X0 e( P) q
static const short da850_evm_tl_user_led_pins[] = {1 C7 H r- [9 K, V* E
/* These pins are definition at <mach/mux.h> file */
% ?8 E. m+ X4 A1 O: R DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! q3 E: F3 w9 S) L
-1
. V* M7 F8 H8 P, n4 K3 o; ~) E};- E# `) A4 y7 ]3 }3 a3 ~# [3 t3 _
" D% f* A G6 }0 i9 h- u6 Y
static struct gpio_led da850_evm_tl_leds[] = {. A6 O- Y/ }8 Q# F
{1 T5 P2 V6 o. v+ k+ p
.active_low = 0,% d# C% b8 C3 s0 _
.gpio = DA850_USER_LED0,
2 G) x5 k& F$ h5 X .name = "user_led0",
5 r- x+ ~: ^! W" A; L .default_trigger = "default-on",) }$ c6 m2 t% d9 ?, S" G7 v- l
},
0 L- A- q% g2 B" e( ?+ Y- X {" {! J+ T, a# K( s! F {
.active_low = 0,
( I. Q- H: o2 r3 Z- X. n .gpio = DA850_USER_LED1, v5 m; [' m2 R9 Z
.name = "user_led1",
5 H# A$ X: W2 Q! L .default_trigger = "default-on",: l# E! x& ]0 Q/ s' h: m, W& L3 O$ |
},
1 v2 B1 s$ c/ {9 \% a$ q {) w' C7 a7 r. p7 f
.active_low = 0,
- Z, e6 \5 x! G% C .gpio = DA850_USER_LED2,' Y# x1 Z! x- Q& U0 [5 l- o
.name = "user_led2",
% l" @# A" \% w3 S$ d4 U6 t .default_trigger = "default-on",2 g5 z M4 q. l4 r: G
},
2 ^& f g9 ^$ A4 I! c7 W {1 x$ `3 E8 m/ \7 |5 g
.active_low = 0,
! t7 a+ l& |; C .gpio = DA850_USER_LED3,% X! {& Z. X% t; d7 t+ K8 s
.name = "user_led3",
. `' u7 j$ N" O j& r3 d+ c .default_trigger = "default-on",; z9 W9 n5 M5 ^6 o- e' S" q$ [
},8 z9 F0 k! i9 [# g
};( e# I; A6 W5 g$ w
* Q# e9 o( _' Z" q& o4 U
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 q1 T N3 {$ N
.leds = da850_evm_tl_leds,
. N# A& r5 P! n! ?4 M. q* |' J7 y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 y* t8 O, y! O- c};
, [8 W, h) `- ^; n' V; Y* [
5 B$ U/ ~0 C# Qstatic void led_dev_release(struct device *dev)4 ?. [% i1 S$ Q0 z6 D2 X
{5 o. i W* {% x
};
+ E" ~/ J* ?& z: e- C$ N& I1 T
( H, }* U, `- ]2 H) nstatic struct platform_device da850_evm_tl_leds_device = {
8 i2 G1 R6 d" T& g& f. R .name = "leds-gpio",0 g0 g: R% M' |& ?! b4 `
.id = 1,0 T5 S$ b8 g+ F* v& Q) X
.dev = {
( t1 D5 ]( z6 F .platform_data = &da850_evm_tl_leds_pdata,
% h- [+ i- O/ t" b8 n8 S .release = led_dev_release,6 y4 ]" ~' t8 X5 w; _
} S) q* X) H. e& _
};
; F" Z/ T" A1 \
B# z/ `1 Z( Y. r; o6 }static int __init led_platform_init(void)' `/ v( O( u# d' R. g! k5 @, W+ w6 x
{
5 f; ]: {' e2 c7 |+ v, S2 E int ret;
2 L X, e& T0 P* @( b: _# A- q#if 0
! v1 h6 {% K/ G! x, {$ O% l ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( C; H7 _' R+ F& Y \/ r6 Q) u3 c
if (ret): O, ^3 r7 ^& }, t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' W3 c$ M# x# H/ r "%d\n", ret);6 y- K* j' F s3 S- y4 x
#endif5 u' B; x% ]. N! U
ret = platform_device_register(&da850_evm_tl_leds_device);
9 G( ? G7 c/ T0 A if (ret)
& Q( ?& z4 h7 G% N pr_warning("Could not register som GPIO expander LEDS");
b+ E. P J9 z3 z V# \# ?1 R else" F( {# t1 ?; z) g
printk(KERN_INFO "LED register sucessful!\n");* n4 `2 Z# T1 h7 \& C. u* ^ {4 R
7 M; f9 B, X8 t$ C: O
return ret;
5 D1 @7 P' w! b( X) K+ x% w}' q3 w$ ?& `) [, l2 |
6 ^7 g' L9 ]4 O; @
static void __exit led_platform_exit(void)9 O! [7 v& Z* }3 ]! ?
{
" P+ Q% r' A9 K! B2 z9 q8 s$ w platform_device_unregister(&da850_evm_tl_leds_device);! s1 m* o, N# F/ e
R" {! J% l. S | printk(KERN_INFO "LED unregister!\n");
' A2 z" S$ V/ y a3 R- j# }}2 I* T' m# R2 ^& @
+ A. i$ u, s" p6 y6 H h/ I9 Amodule_init(led_platform_init);3 z. i! J) M( s# a/ j C: E% y4 t
module_exit(led_platform_exit);
8 B: M2 ]! u2 H+ ?" b2 ~" o& d. V/ i$ G1 B7 x* W
MODULE_DESCRIPTION("Led platform driver");0 ?: h `2 ?8 t4 l
MODULE_AUTHOR("Tronlong");$ u8 J8 `8 e* z Q# y) E4 J% d
MODULE_LICENSE("GPL");
6 r) F7 T/ `5 z7 p1 g/ Z' C3 z0 s& b5 p/ n
|
|