|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. Y& x$ q! F8 c#include <linux/init.h>" [0 ?+ h9 k6 W( l
#include <linux/module.h>
/ d) G+ X; p: g' W#include <linux/kernel.h>
4 V5 y" O8 L. z#include <linux/types.h>
v* L/ _: v% ]& O2 I2 ?) p#include <linux/gpio.h>
/ \& O6 H5 I+ y- o! X#include <linux/leds.h>
2 Q ]. O) E( F#include <linux/platform_device.h>
1 i. J/ d3 x: w) ~
- n4 g2 M7 l7 k* c. Y# q8 I#include <asm/mach-types.h>7 f3 f% c/ Y. w+ h1 k; S$ j
#include <asm/mach/arch.h>6 d* k4 |9 X+ G# Y% m" ^; R3 b: M
#include <mach/da8xx.h>
* X% p) T9 ]+ Q: A& q#include <mach/mux.h>: ^. c- H- Q9 N2 G, D1 X3 f
8 m' N8 Z8 a: Z! p+ \7 j
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ G1 I3 I6 F& N3 [
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), \$ r( V- |9 m4 W+ |' p
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), Q; \* q4 F( f# y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# x* H+ i6 S8 @. U# g9 c
6 j. M- J& k' R4 F/* assign the tl som board LED-GPIOs*/
' i) m6 Z) I* ^1 wstatic const short da850_evm_tl_user_led_pins[] = {
, Q9 o# x* F" Y) N* L; w9 u8 M: o2 v0 Q /* These pins are definition at <mach/mux.h> file */
( i( o0 C* H$ S3 l; b; b DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, h" y. P8 r# e2 M& c5 Y -1
; h9 v& M8 Z, b8 U) D! K$ L# ^2 t0 W7 Y};* u' i: o" L7 T" ^( c
0 S0 o# |, v/ {! c+ N
static struct gpio_led da850_evm_tl_leds[] = {
, _: `; U" D9 p {( w/ h% F5 r5 r% c" D) ^: G
.active_low = 0,
$ R I$ O4 P6 F. F5 W3 z" Q) M .gpio = DA850_USER_LED0,
5 {4 _! C) D1 |) T+ y" I/ N$ } .name = "user_led0",9 Z/ n6 D% j; \! Q4 W* i
.default_trigger = "default-on",
# g- ?7 C2 k" x6 e$ H* C/ g },# I3 v$ ~% R, t
{
$ K' ^4 S0 d4 M; e |1 y .active_low = 0,, P; _- E! r1 L+ s" P: S" R
.gpio = DA850_USER_LED1,/ f9 q8 w& _% G* i E3 F
.name = "user_led1",
" {4 o0 b6 l) J: l; v .default_trigger = "default-on",
! q P& S: u! v Y: p+ v },
8 d0 H( [- o7 ^$ ]0 ^ {7 Z7 [6 M! d$ |! s$ Z& K
.active_low = 0,1 d Z7 p( t( }+ g& P# n; M/ B
.gpio = DA850_USER_LED2,. T( D/ T- O' Z4 |
.name = "user_led2",
( F* k$ o& G! Q. ]! ]( r .default_trigger = "default-on",, ]; _& e2 D! U6 g1 C
},
1 ~0 b( `7 N( C/ ]" _ {
, L" @/ m- n8 j ?- V .active_low = 0,7 u* Q* M, y+ }/ i
.gpio = DA850_USER_LED3,% l9 ^6 _# B! U
.name = "user_led3",; ~9 `: C9 s4 a- e4 A3 n7 X$ k h
.default_trigger = "default-on",$ d$ a P4 W8 w% r! @0 {# l0 ^
},
0 z( G4 { \) V};% m3 j, [- t$ u+ ]5 N
9 L, f5 A- l! ]* ~static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ T( f4 f. [" \" O6 r( F8 x; f .leds = da850_evm_tl_leds,) p7 C7 j0 u3 f3 B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 U' k/ p2 F$ @}; M* V2 C6 L/ T3 A( z
; K- h& c+ D& n: I5 |static void led_dev_release(struct device *dev)$ C0 v$ U8 J/ B# P* `& B' D: j
{% U& K# j( u) Z( O1 w' x! a
};. t, `1 J! J r
5 O3 Q- \" |( Z) m" f
static struct platform_device da850_evm_tl_leds_device = {
+ [& Y" {$ h" j& R" C- e! u' v .name = "leds-gpio",: Z5 Y4 J* ?5 C. Z/ I9 S
.id = 1,
- Y3 q Y0 x& i" z. ?9 P* C .dev = {
3 f% `, X# B9 n" S1 v. K9 [ .platform_data = &da850_evm_tl_leds_pdata,( O: ? }. E% h2 |: p! a
.release = led_dev_release,
' R& J0 e& K7 Q! e }; `6 z# w+ h$ E) ~9 O \3 g' x: P
};
) F1 C$ l2 a# ~0 i3 }2 h! F# {2 t ~2 J+ H
static int __init led_platform_init(void)2 b% o, H/ T6 E
{
' A @2 j$ g( o7 t) J int ret;- ?& R$ e$ n+ y% }
#if 0; R2 Y, W2 q9 w
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 j0 C, W/ B/ t! }, m2 a
if (ret)
& A: a9 K; M' b: o9 _5 A pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( G- l g+ R2 \6 M3 s- W K# V "%d\n", ret);
; W) C* f4 I7 G: w- F5 c1 F7 o7 t#endif+ O# ^' n* O' P. S
ret = platform_device_register(&da850_evm_tl_leds_device);
: a- K: e9 D2 A- Y8 e; w if (ret)2 C. M' _& Q: U0 ~5 \) z# f0 \
pr_warning("Could not register som GPIO expander LEDS");
' i2 H' V6 d) D S y else
% m/ e& U7 w x4 ?9 Q3 P7 q0 i5 q printk(KERN_INFO "LED register sucessful!\n");! U) l( U0 s k0 i5 v
* [1 @$ n- N& U return ret;$ W" ?& q( [2 o
}5 n. b8 p- W O3 z: G3 X- c
& V1 H- |$ s1 `) ~- o8 q, W" I
static void __exit led_platform_exit(void)
# ^3 ?! p7 w, s! o5 V4 o4 e# t{$ Z; R# l$ X' I$ F
platform_device_unregister(&da850_evm_tl_leds_device);
3 k' u( V( `: L# O z& d+ m$ Q
4 c9 f6 [: m% G printk(KERN_INFO "LED unregister!\n");
7 y/ D( b$ Z1 f X, a' T# X2 K}. P/ q$ `& `6 m0 S) x( ]6 i
, v! R/ k+ u( ]( g
module_init(led_platform_init);9 R, z, K: ?- P6 ]
module_exit(led_platform_exit);5 |3 p1 ~9 B1 k6 M
. z/ I3 o; J' wMODULE_DESCRIPTION("Led platform driver");
0 K* H% j- f& O7 GMODULE_AUTHOR("Tronlong");( z. Y9 R: y: }7 \* }
MODULE_LICENSE("GPL");
! T- E4 j( k' j2 Y/ u5 w2 B% N. r% o2 O- g
|
|