|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: H! h' @7 x# Y) A. ~. x- U
#include <linux/init.h>
* @! X3 m8 c) Q% A$ P#include <linux/module.h>3 z! H( I7 w% F7 Z: q$ l* J+ W
#include <linux/kernel.h> r5 I) \- s. P9 O3 E/ y% p& A
#include <linux/types.h>4 v8 B( M1 c5 |
#include <linux/gpio.h>- J5 \8 j2 u& b: z, t! P
#include <linux/leds.h>1 t: x# T) Q$ C3 ]
#include <linux/platform_device.h>, o g W3 v" {1 F( z
+ d! `; W3 I5 D% A: b( y; ^) ]# \#include <asm/mach-types.h>
: r" ^; U; `* q4 J- \* J" z#include <asm/mach/arch.h>
( g9 z) `' q9 X; d#include <mach/da8xx.h>, {* A8 T% Z r% g
#include <mach/mux.h>
! m* }' u) H: C! v! {1 I' Y# q' j
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ J' H3 x: }9 X* q6 p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' W( q/ C$ D* Z5 Z2 C$ ^
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! y+ ]6 _2 N$ c+ l& l; o- `* r
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; Q! ~1 ^( p* m$ M$ ~/ H3 w8 @) R: ^3 @* N* W5 Q! z. o
/* assign the tl som board LED-GPIOs*/
, e$ S0 P# q& `$ A+ X, ?static const short da850_evm_tl_user_led_pins[] = {
0 W6 Y6 D" P- Q. l /* These pins are definition at <mach/mux.h> file */
1 y( ~9 k/ |+ e/ r$ m, ?1 t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* e% W" [6 N k9 f) N -1
& G$ x, E( L% x4 Z/ x. v& Z};
8 Z" K+ ?4 Q1 t4 d7 `1 K+ T. Q+ u9 _7 J$ L
static struct gpio_led da850_evm_tl_leds[] = {- E& l: [4 z' ~+ \& t5 r
{4 p! F, ~) ]! w$ s7 i
.active_low = 0,
* `+ C7 k: k2 h4 c) w8 i .gpio = DA850_USER_LED0,8 e" T' u9 f B. Z4 X
.name = "user_led0",
% I1 y7 \) C+ a }) h' a/ e* c .default_trigger = "default-on",' {0 d8 V- O w9 p8 z
},
# U: D. @3 H4 y" O {* q! J2 H8 C' i* p! m& n
.active_low = 0,
( J' [. R' C4 D* q6 ^ .gpio = DA850_USER_LED1,+ {8 _! q: W6 ^% G2 K9 a: T4 O
.name = "user_led1",5 C! ~) T7 d% h- K) G
.default_trigger = "default-on",1 I& _3 A% S0 k/ @9 Q9 y
},* g3 v" Z4 J( Z- F) a) P3 T- J
{
! _7 o: i9 }. b. q .active_low = 0,# ^1 X# B& @$ o& w
.gpio = DA850_USER_LED2,5 U+ j1 l$ V- p( G
.name = "user_led2",+ w! o- g9 V5 Z9 x$ p" k* W
.default_trigger = "default-on",
* b+ S9 n$ o- F. Y G: Y* D5 o* M },1 K; x$ Q5 g4 Z: V
{$ p& q4 u0 ?- n5 ], T
.active_low = 0,
6 \% `. v) d' a, ? .gpio = DA850_USER_LED3," W" S1 t. X4 A6 C4 k; l" O/ `! H
.name = "user_led3",
, p5 e) t$ T! d G) j .default_trigger = "default-on"," t: ]$ V3 L, [; I$ L5 B9 f0 k
},
1 o$ @6 p D5 I! x8 ~: s};: w% ^& d* a' P p3 r
+ d% a/ t7 G% gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ @/ z, s# h" v
.leds = da850_evm_tl_leds,# g! S2 W C! p' w* A8 `$ G% v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 s( X: r3 d( u) O2 O w};
& H0 g5 T+ y8 J2 F7 d/ p8 m( v7 I7 u8 i5 C# X. E$ [8 f
static void led_dev_release(struct device *dev); [0 ]- ~ S: {$ D
{ D* `' }+ C/ d- b) X c& ~
};
( G2 C2 N8 ^8 w. \5 ^
7 q/ `& y4 q9 Z0 E5 @static struct platform_device da850_evm_tl_leds_device = {
, \$ H; C: y4 W4 ?3 Q' Z3 j( P* t .name = "leds-gpio",# B F! Q3 i7 Z9 i; \
.id = 1,3 S6 i. r2 y" E2 C; _
.dev = {# i( o9 U% E- \# c
.platform_data = &da850_evm_tl_leds_pdata,, i9 b0 p+ h0 E: m7 X1 z
.release = led_dev_release,
# S! h, [# M: K- @; U6 Y4 B5 U5 N* C }
: K* ]) G# H* s8 i2 `};
6 ~+ }) R: ~* U$ @3 i4 L8 u8 _# i; z8 ^8 y
static int __init led_platform_init(void)
: \8 K9 C2 e# x: Q# j- A' q{$ V3 r6 ~7 \& @9 ]# [
int ret;% N! D# N$ y7 s4 K) f, ]1 ~
#if 0
' C$ {1 u8 U6 \5 g ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. Q; w. j& @% X) K3 s- K9 p if (ret)
/ q1 A2 D& F* Z* s pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
l U# W) B' b/ s6 V "%d\n", ret);
# G$ U: Z" P1 k6 H1 S3 h2 H9 \#endif
9 R; L0 O. p9 H o% A8 X$ z ret = platform_device_register(&da850_evm_tl_leds_device);7 H. Q$ l+ _5 _; I8 C' P/ R7 E, J9 @
if (ret)
( b* |8 k; F9 ]9 T7 G pr_warning("Could not register som GPIO expander LEDS");
9 l! e" l* ]' z4 |/ u1 q. Y; r else' k: ^' p7 z3 c6 r: Z
printk(KERN_INFO "LED register sucessful!\n");
; E7 c$ M$ u; j* }
b& f8 W3 v7 e- }8 X1 f# b' E return ret;) `& {& i% Y* \' r+ e
}) }# G4 [/ a2 M d- S! E: k
8 E3 i4 `, t5 {- J2 v
static void __exit led_platform_exit(void) U* X6 d4 Z! Y; I; M; z( t
{
8 S1 ^! y0 `+ q# C8 G platform_device_unregister(&da850_evm_tl_leds_device);4 |+ Z4 X0 q' z q' |
* h+ Z- d/ @ W. J# ? printk(KERN_INFO "LED unregister!\n");
6 O, ?! \; R3 y& ?: z}
( Z9 ?, ]) U" S
' D1 u0 D$ t2 o. g5 Gmodule_init(led_platform_init);
7 b% g9 G$ |" p5 U2 O5 }- r4 \2 jmodule_exit(led_platform_exit);
0 l4 [- }1 w+ H
5 p5 h2 A& M( k4 v$ _( U2 r% _* i, lMODULE_DESCRIPTION("Led platform driver");
]4 `, P7 X3 ~- r UMODULE_AUTHOR("Tronlong");
5 r+ X# P7 [' C, p+ \' y+ \; lMODULE_LICENSE("GPL");
j! h, ?) y7 i8 Z4 _: U3 a. k4 T* s' G# P2 u4 U% Q$ R
|
|