|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 y0 P5 G; @% O# T
#include <linux/init.h>. C6 t3 ]2 A$ y) k$ Y) x" M) u- H+ p5 F
#include <linux/module.h>9 |" V% ?# X: M A* D! G- K
#include <linux/kernel.h>; C9 P" o/ \/ c' i
#include <linux/types.h>% i6 @1 r+ C- r" N" n$ P
#include <linux/gpio.h>
2 ]/ q0 A% T! G5 |#include <linux/leds.h>( d; S& s/ ]* z$ p
#include <linux/platform_device.h>, {$ B1 P1 ~7 v# j3 A* ^/ A9 e
, j! v$ o' t3 H7 k- E3 k" i+ g#include <asm/mach-types.h>) c* H/ k. e6 [- J8 T9 l5 }+ i
#include <asm/mach/arch.h>" ^7 b2 U- w; ~ E4 T/ f
#include <mach/da8xx.h>4 s/ Z9 r* z3 e3 d% Q/ F
#include <mach/mux.h>
* u0 ~& \" v) L) n6 ?9 E( }' l* }. ~ v
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& ^+ t& W' D( m1 Q# S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ \" G* T0 ^1 J+ Z: E/ {#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& H, y |9 x, ^# q0 Q4 {6 x; `. D#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- x; A; |5 J! {$ r& ]1 o$ S
/ D' H* {5 D7 ~" n' p3 X% E0 q- n/* assign the tl som board LED-GPIOs*/; `4 ?2 c3 V$ u' C: L9 r' x
static const short da850_evm_tl_user_led_pins[] = {8 J3 m- B% C: y6 w, g Z: b
/* These pins are definition at <mach/mux.h> file */- G# O6 `, {; M# I- R3 [) i( r; s
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, N% w6 K7 \+ B; x( C! @3 i: b -1
/ N9 T, h1 Z8 t# i};
' Y b8 |( {& F9 Y3 `3 e* u8 T: k5 d: f7 R1 }% ~# q% L$ p
static struct gpio_led da850_evm_tl_leds[] = {% K* P* `/ l" }
{) W3 [ y) Q* D1 C0 d; z8 m
.active_low = 0,5 M, M5 R G2 |- M% i v6 _- X
.gpio = DA850_USER_LED0,
- {6 Q. B) @% I8 F2 R3 G .name = "user_led0",) D, `& b9 @9 L- V F
.default_trigger = "default-on",9 f+ k l0 l, b- k
},
( H1 g. p" C# T! m% L3 W) u {0 f% R: T+ O* C$ _) G
.active_low = 0,: T/ B# F! P2 e! ^, {. c+ V" Q
.gpio = DA850_USER_LED1,8 Y& I7 A! F$ q% w! ^+ V) C
.name = "user_led1",3 C+ A0 d7 r& Z3 K3 h5 {8 J
.default_trigger = "default-on",
% k' E- O8 e! c* e+ g. A4 { },: e5 j& i6 A. u
{
4 L1 w/ m! t' }; V2 u6 ]- l8 @ .active_low = 0,+ e9 h! ]) V# K9 s P X+ F
.gpio = DA850_USER_LED2,. g; l$ @& n) @! N3 P
.name = "user_led2",
7 ^) D/ W: K8 M1 {+ Y .default_trigger = "default-on",
1 c2 i* L4 |" O' v( T& X- ], } }, V1 r* ?' d) l7 y Q- A2 s: x
{
q4 } {( H* n5 G& j .active_low = 0,
2 [% L; m- b+ i/ S) W9 s. e) V) ]" U .gpio = DA850_USER_LED3,
# d; s" |! Q) M- P4 P0 S) J* Z! _9 v .name = "user_led3",: W9 _1 {/ {8 k4 f' v: \2 N0 p" [
.default_trigger = "default-on",
5 _& P( b, D# `2 h2 H/ m/ h },1 P" E& X- z7 ]/ b, c% v
};/ J7 N4 @/ q( X% J
9 M* ^3 M4 A8 h: ?, n3 r! y0 N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 n& U9 r$ C. M7 U; D" B) A
.leds = da850_evm_tl_leds,
. U/ s, O# T# D" W2 w3 M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 n2 @# W. I; }/ ^ L% d};
8 \+ j- A; b. w2 N. K
# I# `& m/ w) I) u5 Z6 w( W3 S: ^( @static void led_dev_release(struct device *dev)5 S8 F! Q7 a) {# X( W% ?/ x7 H
{
3 A) t+ L* \6 l; d};( R, ^) I) `7 d5 X# Q/ Y# s. Z
7 E8 c7 e9 m* n
static struct platform_device da850_evm_tl_leds_device = {0 R5 S6 l a% w3 i$ ?3 W% O
.name = "leds-gpio",: |0 y) l) s) x; ?' \/ n) b
.id = 1,
2 Y6 U: q2 A% v1 z .dev = {
- w( y) \' F. N4 ? .platform_data = &da850_evm_tl_leds_pdata,
: U: Y8 _& r3 d$ c5 m6 X9 V4 `/ J& S" A .release = led_dev_release,0 H. W; u3 t+ ] _- }+ T
}
7 o# z( b' Q' t4 E( d2 U: j, a};/ r) ?* I3 k* Q- a
9 S# N& H! x" F% S S
static int __init led_platform_init(void)$ R g! B4 ]$ S% [/ k4 _+ s
{1 t# ]9 Z/ Z+ ^6 i
int ret;
8 q! h" z3 w; @ w9 j#if 0
1 a5 ]1 W% S Y" O% p ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 |( a% ~' l2 L+ `5 B3 T* [
if (ret)
5 p& p; t1 t: X( C pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 J/ ?4 ^' ]0 P) k, U
"%d\n", ret);
. ]7 O: h. r4 x0 k U#endif% m6 W+ w" E0 l6 W' n& S% A; o |
ret = platform_device_register(&da850_evm_tl_leds_device);& O# I% Q+ a, f& {" I
if (ret)- c; F" T8 u8 Y d; j4 a
pr_warning("Could not register som GPIO expander LEDS");
/ `3 l$ w( P3 Y9 X. T. n k7 }* s0 `7 o0 m else$ w3 V- f, |) a
printk(KERN_INFO "LED register sucessful!\n");
! k# j! m/ L8 g- o9 A+ ^
& _" W7 L6 @. M( S' d return ret;# @( J4 E, r" f% e% V
}2 T+ @# Q. v9 \3 M0 U1 m4 m+ P
# q! b% k+ E# M" N
static void __exit led_platform_exit(void)
3 U! \/ U' T$ { N% k{
5 I8 h9 J# l' `' ~3 C$ N platform_device_unregister(&da850_evm_tl_leds_device);/ {' ?. w0 {8 f+ C8 k
+ O( W% {7 g. t" t6 h printk(KERN_INFO "LED unregister!\n");
' T" O6 d4 i8 F# ?& \' ^% y}0 r( M& T" C* _1 V" t
4 A$ f1 S I) Q- _+ T; Z: Q
module_init(led_platform_init);, k. [/ Y0 c6 w% p0 o
module_exit(led_platform_exit);
" U* _. U7 T! \3 a5 r6 |7 ^$ `- e/ x5 i1 a' V
MODULE_DESCRIPTION("Led platform driver");
q3 k0 J9 _9 v: |& \6 _* x8 v& IMODULE_AUTHOR("Tronlong");1 B0 h9 f: I* k$ c' O1 A
MODULE_LICENSE("GPL");+ E+ P" D& u8 p2 e
6 J/ Q$ O# @# x5 S9 z |
|