|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 b( S4 ?6 @' k/ P
#include <linux/init.h>) K/ d) F6 }; ^- P' R% L
#include <linux/module.h>
* F) \) T8 K: l2 l# W1 o#include <linux/kernel.h>0 l+ \. v* Q$ |) I% j$ w& p( y# G
#include <linux/types.h>
, d7 d1 U" E8 l& k3 x3 T, |#include <linux/gpio.h>+ |1 a1 g% m5 d2 P1 _& P8 Y
#include <linux/leds.h>
+ t. C& \/ i, d6 ^2 e( q#include <linux/platform_device.h>
$ P/ W$ Z, g( t- \5 X7 a
/ H/ W* q+ j( n#include <asm/mach-types.h>/ l' |6 G# c7 U ]" | @
#include <asm/mach/arch.h>
: y2 F2 |$ ?7 g3 T/ z( r, G2 q% F#include <mach/da8xx.h>
3 w4 L) ]' z& u3 y! {7 R6 j2 v#include <mach/mux.h>' g4 k0 w% Z' t d F
5 g1 |8 }# P! p+ d5 i9 K#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' _5 n4 W6 z) ]/ a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! p, @# d0 W% V- E#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 i1 d# w7 |) Y" ]* Q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 A. Q4 }5 I z; d, U4 C
% V) d- M" Q' ?8 s3 a2 C8 p/* assign the tl som board LED-GPIOs*/
9 C- H# ^8 F0 A; fstatic const short da850_evm_tl_user_led_pins[] = {0 q3 Y2 l9 ~: L; B# G
/* These pins are definition at <mach/mux.h> file */5 i" B& N. x$ [$ U. C* d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 V3 j/ b5 \, r r# z+ g3 a
-1 Q; Z+ t2 D# x% g' a
};; M$ N9 e, @6 I+ N5 |6 r
$ `' d" q" v! S% z
static struct gpio_led da850_evm_tl_leds[] = { Z2 ]2 B6 I) H3 N6 U% ~
{
O$ v! u. ^; n" d .active_low = 0,. G$ J( d, c/ E; G# b& L! d7 b
.gpio = DA850_USER_LED0,, j- y9 U6 B; F" U
.name = "user_led0",8 b% K m& {9 O' d. N8 q( W
.default_trigger = "default-on",
' @' V# v$ ~+ [5 r },
* P2 W5 S% X! ]7 r! O {
: L! I# c4 J8 _3 h2 T8 u9 f .active_low = 0,
9 A: q( e. y1 \, b& [ .gpio = DA850_USER_LED1,( A$ {( E; c. C" D" I8 t
.name = "user_led1",2 l& [$ L! z4 j) Z J
.default_trigger = "default-on",
! J$ m$ }8 C$ a) i },
$ `* ?: t. B& k* i {: y$ ^& W" d8 Z- n+ x$ V! z
.active_low = 0,
1 `- ~6 l5 ^- G, n# j( U .gpio = DA850_USER_LED2,/ E9 `; @' D, I5 B( ?9 V
.name = "user_led2",
1 k* o# k0 D+ W( f% h .default_trigger = "default-on",
8 v9 [# q' w- a# T) @$ K },
& } r3 |" f# E0 j {% O( H# G8 j3 S; _# Y$ p W
.active_low = 0,. N/ t" b: b/ n2 a& r( h
.gpio = DA850_USER_LED3,
+ Y' X' r" X$ K- y5 Q# y .name = "user_led3",
$ `! {9 p- c8 m9 Q3 P' v | .default_trigger = "default-on",
: H( q" q" w4 [8 I- } },
! O1 q! @6 S# N V; I) ]& V8 ]};1 d3 r* I2 M% k* r
7 I2 v) i8 q `9 E w
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' d6 t% g6 h# O
.leds = da850_evm_tl_leds,
6 N* r, n4 ? S* K! f- H2 i, C- }+ j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 T& W$ Y8 I0 z1 k; e9 M, U# k* ]};* F# ]2 f# w( F* o7 q
! Y& `6 h; h% E, } U* }7 H0 ystatic void led_dev_release(struct device *dev)
! t& b: g- Q) K# Z{
5 W0 K% L0 u2 s# x& }* Y};0 U0 W% s, J# W
7 }4 E1 r, d" a, l& Astatic struct platform_device da850_evm_tl_leds_device = {
) J* X, Q2 i: w+ T# \ .name = "leds-gpio",
& L+ x ?8 C, n7 i .id = 1,
; w# c( F: R" n+ O9 ` .dev = {$ |2 C+ B z% I
.platform_data = &da850_evm_tl_leds_pdata,
: @4 L( Y5 f' s1 [: F$ `" s .release = led_dev_release,
! m# Y4 v5 L7 ^8 X* Y }& g# L }5 F* j$ u" I1 O7 r. @; j+ V
};
+ }# E* R# i6 {9 y7 J2 y3 q- j/ t* B, B A$ A1 o8 c3 C
static int __init led_platform_init(void)
9 S; e/ b: _2 q" \{
2 X6 D! z, x( Y/ A# ^! G* A+ W int ret;% }6 K3 _8 T! ]- T% i m
#if 0
9 X9 ]' p( L2 ~$ n' k ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' z) G$ b4 ]$ m% E' T6 b" F
if (ret)- b; T/ S* P/ s4 [0 f# K( R' f
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; h9 S7 i6 T2 a1 j' \& ~ "%d\n", ret);7 X$ ]3 Y8 Z) B4 N- e B0 ^& S
#endif/ @* q5 H! M' _: Q. R+ K
ret = platform_device_register(&da850_evm_tl_leds_device);+ ]$ T5 ~& w8 U2 w
if (ret)
: [& R- [* Q0 w8 p! f# T+ [8 U+ k pr_warning("Could not register som GPIO expander LEDS");+ x( D7 Z7 V% m2 g5 Y
else
# ~) c4 \$ p, h' G+ E2 u printk(KERN_INFO "LED register sucessful!\n");
; P5 H8 _& n2 ~5 x
% h. D$ |6 o1 N! e& D& Z/ s return ret;
0 {% Q! i& ?6 i; R}" s- T/ A% a& x8 G; @/ G: w) u
; J* Y) R6 j8 ?0 l7 Z
static void __exit led_platform_exit(void); k1 W) S) B% R" w! F" O
{+ q1 T' L- G, t. X
platform_device_unregister(&da850_evm_tl_leds_device);: F) j1 r0 u+ Z
3 }1 C6 W. z7 r( ?% T2 v6 E! N- ^ printk(KERN_INFO "LED unregister!\n");
. r2 C4 i1 J! A8 v, a- Q) O- s}
+ v2 |( l6 I4 a' `- x8 D& ^) {$ s
' o1 l- R6 U4 c+ W! ?$ t9 F3 t0 nmodule_init(led_platform_init);
2 H; u: o1 {! d2 }module_exit(led_platform_exit);, U7 S- a" k: f+ Z
) k) H: j& [" k8 w* p) k( f2 c, d
MODULE_DESCRIPTION("Led platform driver");
% e3 j$ P& }) Q9 i2 E& v C- J6 PMODULE_AUTHOR("Tronlong");; I8 v7 g1 z4 |2 e% [7 e
MODULE_LICENSE("GPL");+ h: `9 {* M9 n6 @$ `2 ]' _
( K6 O# @ R1 e |
|