|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 M9 K+ \! o' t3 f$ X/ r% H
#include <linux/init.h>
! D2 p) V- h8 R# B& P/ e#include <linux/module.h>
' | T, |% v7 l/ t1 a9 }5 z#include <linux/kernel.h>4 Q- h* s1 c+ d7 o
#include <linux/types.h>
4 {4 }) u# W+ g. A. \/ C. j' K! ^# _#include <linux/gpio.h>
* {" N! j& K! n) Q1 z. W7 F#include <linux/leds.h>( ]" O5 U9 u, [4 v% \- v: D
#include <linux/platform_device.h>5 ?4 w6 |2 z# L3 h; T8 b
& M# b' A+ j* A6 V9 ^3 ?- f
#include <asm/mach-types.h>7 F l8 m' X- m2 @; I% a R- `
#include <asm/mach/arch.h>
) l6 K, J- [; m r#include <mach/da8xx.h>+ K6 s" Z; [. r% l8 z+ T8 P4 b
#include <mach/mux.h>1 I# p4 e; Y3 L- M% O3 z
( B) ]& Q6 i: W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( J7 D E5 u5 p! J7 H- m4 e# l
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 ] M# I I2 w, ~: A5 a$ x
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 V# x6 C7 `' O3 w# e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( t4 Q6 E* p5 L- ?' i4 o0 r' y$ F' ?1 I! t6 @+ ^
/* assign the tl som board LED-GPIOs*/
, P# K# t/ S F& P( ]static const short da850_evm_tl_user_led_pins[] = {
# V A* _7 g& ~5 ]! V /* These pins are definition at <mach/mux.h> file */
; H4 V) T0 f1 Z; j, a+ i% s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
f6 l. ^: G1 S, O$ I; e \: F) n -1. _" }. B: I+ e' R$ T/ h
};6 k C& ]( E$ ` @& r- l: m- \$ U
* G. j3 i/ |! U# y4 D ostatic struct gpio_led da850_evm_tl_leds[] = {
! N9 ^$ e3 l; i2 { {
+ k3 D: J6 N/ @2 l/ g .active_low = 0,
( B6 h# O% _: |9 {2 O. y8 R$ d .gpio = DA850_USER_LED0,0 S$ C+ ], v: c& H1 `2 S2 K& c
.name = "user_led0",& M& Z' c/ J5 u0 q8 K/ i
.default_trigger = "default-on",
3 g$ ?( K# j% c },
t. t% J1 ]& |- R) g1 }* [ {3 x$ e& R3 l+ J% [
.active_low = 0,5 A1 L% y" x9 t! ?
.gpio = DA850_USER_LED1,
$ D7 z1 B! V: K: V8 T1 h .name = "user_led1",
4 N2 n; e% e6 k( o2 C .default_trigger = "default-on",
9 I& |8 @6 c, b8 {/ x6 [! n },
8 N1 |( \- z1 j: b {/ y; d8 E% E' O: u
.active_low = 0,, t! D/ H u- Y" l9 P5 I, P
.gpio = DA850_USER_LED2,8 |3 ~% |3 u( I& o: W7 f3 ^
.name = "user_led2",
* |8 i0 V7 X c7 B( D5 y .default_trigger = "default-on",( L; G+ H. m" x1 _ }
},) U" W n" v/ i8 W
{+ W' ^! s, d& R- t$ [
.active_low = 0,
7 w# _% ?6 i1 u. X4 j& ] .gpio = DA850_USER_LED3,
* N$ V. m/ @& v( p5 p2 R$ K+ @ .name = "user_led3",
$ ?" v5 l: G% t- A .default_trigger = "default-on",
0 o' I2 @& a C, [9 O! y( ^ },
g3 ?2 d) w' u; j+ |4 ~};
E V, T/ z7 D) m, _& x# k$ o# v1 r: Y" G% [0 o0 X* t; ?3 ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, ^) p( c+ u4 ?9 A
.leds = da850_evm_tl_leds,9 n0 l; s0 v& A% ^+ w6 ]
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
b( r) y2 a( f- U" ]" J};3 X# a3 T6 O1 e) J$ r" F
( ~. C. Q" \& ^: Ostatic void led_dev_release(struct device *dev)
. x E% h6 G1 q& c0 M1 w6 ?{- q2 A- c# G' R
};& ?: @, i6 e) D7 S3 Q2 v: d
; g' q6 K* O3 B6 |. Ostatic struct platform_device da850_evm_tl_leds_device = {
8 P4 }# M3 b7 B( l: V8 ~ .name = "leds-gpio",
& a t2 m) [! A6 M+ Z4 [ .id = 1,
; A6 \5 q; z4 Z. q .dev = {
8 M l+ Z0 m f .platform_data = &da850_evm_tl_leds_pdata,
- d1 D# `) w$ K3 W7 q1 r) D0 n. K# c .release = led_dev_release,
& \! x- _$ T( ~2 T }$ ], K B' n- \3 L/ h/ n% ]
};( O4 B% J5 j+ q0 c( f2 v
. f- ?0 q; ]* i" A7 o' b9 i
static int __init led_platform_init(void)# t; F& ^4 A: a2 Y& A" |7 V
{, N+ P' R6 s5 g- I6 n
int ret;* w- z, g& O1 z* E
#if 0; _5 U% S, C; s/ R' ]
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& S% \3 b' i- Z* f8 j; {- u- c+ A$ r if (ret)# y/ `9 Y- G4 ~$ e$ L
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( p: c. ~) R9 @7 m9 [- a* o
"%d\n", ret);" i6 e' Z3 _0 q. n w
#endif
, }5 ^* N, s6 S `6 u* a" ^ ret = platform_device_register(&da850_evm_tl_leds_device);- A* }5 g) y- f4 u' ?$ H
if (ret)
5 l9 N. \2 o9 X pr_warning("Could not register som GPIO expander LEDS");4 u$ l8 H5 Q( W; i
else" R' v2 }+ p: d2 }! v
printk(KERN_INFO "LED register sucessful!\n");
3 Q+ z, G3 C, _
9 Y8 B9 {- U/ g' ?* Z return ret;
5 g2 u+ U' O T6 [& l6 v}
$ Q0 ~: o7 {: m$ a8 o: y" b( o6 \1 ], a# |# B2 ]# |- S* {
static void __exit led_platform_exit(void)
( a( D- r1 S; b5 Y8 D/ F9 n{
8 b4 v( x3 @, A$ J platform_device_unregister(&da850_evm_tl_leds_device);6 j. u/ t3 i0 z* @- P, U1 k. W9 ^+ I
0 g6 L. j; T9 Y- S. B
printk(KERN_INFO "LED unregister!\n");3 W7 i. t" m/ T/ \; K2 }
}
# r7 i8 W C) Y% K- r, ]0 e: V
2 q3 b+ j, V3 l2 B/ dmodule_init(led_platform_init);
: I' n. B" P; X+ ^module_exit(led_platform_exit);
1 {6 N0 E- ^$ m4 g5 ^$ e" S+ a2 n6 p! v7 P' `
MODULE_DESCRIPTION("Led platform driver");/ U% u3 u. I0 u0 x9 O. w( b
MODULE_AUTHOR("Tronlong");
/ \# p* H! F5 Q' r" N% R" R. eMODULE_LICENSE("GPL");
& E. z- r1 E% U1 D# l, H+ Y# Q; v7 m
|
|