|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- f5 |8 _! L% m0 B
#include <linux/init.h>
, ]6 e8 F6 F1 e" \" h#include <linux/module.h>
$ |$ \" R, f) j7 n. k1 c1 ]#include <linux/kernel.h>3 X% D" ?1 [5 m4 r$ h% u
#include <linux/types.h>
9 V1 f( l. S: d% C; t#include <linux/gpio.h>0 s5 r, M Z3 |9 R# l; }
#include <linux/leds.h>+ |! `% D D# X1 T
#include <linux/platform_device.h>+ V' j* e4 y' v8 P# k
) b4 X) ?7 o" r5 J; V, r1 ^" s7 u
#include <asm/mach-types.h>$ |" k! H) x" f7 @/ z g6 X& I0 B! i
#include <asm/mach/arch.h>+ {7 k8 k, S% H6 r% ~
#include <mach/da8xx.h>
# |9 L4 Z* ^# K7 u#include <mach/mux.h>! Q2 F- a( s/ k# W8 q2 O+ F/ t0 S
! g" _/ N* [% y# n& J3 l
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). p) c9 V9 G* `$ {
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! t7 p) H) R6 X, L3 k0 U! }; r9 D8 i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 q0 x% o( P9 h7 h5 _0 k2 n2 l9 \8 W" m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ ?7 q5 g4 [+ J. x6 h! F4 o
! _2 j4 Q, P+ Q9 s/* assign the tl som board LED-GPIOs*/- x5 M' G p5 C' Z( w' [4 I
static const short da850_evm_tl_user_led_pins[] = {
! i$ o% d' E! S/ O) U" x3 `3 G /* These pins are definition at <mach/mux.h> file */
& w" ~: t2 Z" j) M& L; n) _ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 ]# _; P* ?7 P6 {3 ~
-1/ `4 ~* @1 ~+ L; P3 b
};9 u- y/ l; G8 `! p% G. N' N! @
0 z* n7 E; _- m; lstatic struct gpio_led da850_evm_tl_leds[] = {9 U, G/ V% y2 R( ?
{
( G4 B! e0 p5 O% X9 i .active_low = 0,
. N: L; Q, }8 k+ K; |! n0 x .gpio = DA850_USER_LED0,
d e; p6 S% G5 u/ c2 Z2 ? .name = "user_led0",6 g2 n0 c! Y V! d
.default_trigger = "default-on",
3 O- y$ n# W( I" F9 J },2 z/ T: t' g; R
{ Q$ x" `4 U# h
.active_low = 0,
5 a0 T. @) f- w5 \+ C& J$ q .gpio = DA850_USER_LED1,2 k4 d( B! z% u5 {
.name = "user_led1",- l( X; g$ X+ P' D {
.default_trigger = "default-on",
& @! e& Z* l( ^2 U },
c* V V/ o1 U" s8 @2 O {& x6 J0 k s: [
.active_low = 0,' s! l* z1 d6 C
.gpio = DA850_USER_LED2,5 V; \, D7 p8 \" p& M
.name = "user_led2",
3 r3 v9 Q$ F+ B0 @ l* Q$ Z .default_trigger = "default-on",
+ ?! y! M' ?$ `6 O6 K6 x },
) r3 W4 x% Z! M {
' \3 _7 C2 L. g& l( ^& s .active_low = 0,! W7 [) E8 ^, z$ N
.gpio = DA850_USER_LED3,/ \0 v S! g$ F; H. C; M7 z4 b- ]- j. D
.name = "user_led3",3 H2 X5 x5 Z7 Z4 L" U% V
.default_trigger = "default-on",: [ d+ w$ m6 c1 P
},6 d+ ?% v/ u( x
};
f, W0 {# l/ q" z4 m* t% x2 U6 Q1 I3 T$ l
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, V! t e" q( L5 Q' z+ S& E! m* T
.leds = da850_evm_tl_leds,: e) |9 S' X. H( e6 m1 h* r$ G* ~* j1 l
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# R3 n. Z! y1 ~, ^, L. g
};
. i9 y8 t7 o" ]1 G7 x+ X5 E9 B! a0 `9 F l5 L* N+ P: F
static void led_dev_release(struct device *dev)' l8 _' f, O; O3 m
{4 m% Z; y3 D: y: l( e1 @
};/ i& m9 {4 r' V6 x7 n$ o
1 L( K6 s! A; h' Q3 xstatic struct platform_device da850_evm_tl_leds_device = {9 N2 z# w m$ e5 _* s6 A7 C
.name = "leds-gpio",2 \% O! ?- Y% q
.id = 1,
; ^% L8 p5 @# o. T .dev = {4 S# K" R# Q# [* ]
.platform_data = &da850_evm_tl_leds_pdata,( o9 @) b4 |3 X- z3 D" P
.release = led_dev_release,
3 d* u/ f6 P; ^% g2 N0 y/ G }& h$ N5 |" n r+ |
};
8 u7 ~* i5 ]( M7 ]
; S1 O% x- S1 g; Pstatic int __init led_platform_init(void)
- s& S5 g, @" A# C$ t& Y5 X{) ?- |! X/ g( y: O1 c3 n
int ret;7 G# T( a; P$ u7 _# P0 F
#if 0
# H4 U! `2 ^- r4 | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 Q; b. [3 d$ x g8 h: a' {9 R
if (ret)
0 O6 d0 A, l2 ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 u2 k3 A# i1 ]) t1 H4 i1 { "%d\n", ret);
4 }# R9 F! K) Y' }8 o0 `1 S#endif1 `9 u% u7 c! \. f
ret = platform_device_register(&da850_evm_tl_leds_device);
q/ a; d+ u, p if (ret)2 X0 U* M% Z/ L: ^
pr_warning("Could not register som GPIO expander LEDS");
& |( c' b7 x9 u% `; z/ Q7 ] else
6 D( I8 o0 o3 o$ w4 m7 t printk(KERN_INFO "LED register sucessful!\n");% Z. L4 @) L1 |' K9 D
5 S: M7 I. v" c7 w. H. D+ i4 W return ret;
0 O3 R- l, f, T# |) ~& k}0 N! W: |* @7 h4 r+ u
7 J* C, a& P0 n4 r2 S8 x Z
static void __exit led_platform_exit(void)7 {3 P* r: ?+ ^3 L3 q& T
{& Y# `6 b6 S% m5 Y' i5 i6 O/ _
platform_device_unregister(&da850_evm_tl_leds_device);. X" [3 H/ P6 n1 u; f4 T/ o
8 g4 M" h' ?2 ?( ?! v7 \ d7 j
printk(KERN_INFO "LED unregister!\n");
% }+ I c3 b& j, y, @# F}1 V1 h% J7 o7 |) c7 k$ X
% G/ \9 o- T+ r# A# u& mmodule_init(led_platform_init);
! O1 M" B* W; \5 rmodule_exit(led_platform_exit);* u/ e2 W2 P- s1 J" j
4 U& E/ N \' M' H' ^- n# k
MODULE_DESCRIPTION("Led platform driver");" K. G R8 E- |" p. w4 i1 i
MODULE_AUTHOR("Tronlong");, B! A. \/ P1 X- K7 p
MODULE_LICENSE("GPL");
6 g( i/ p7 @* z( b$ Q- d# p# w0 r* H# i* Z7 t$ N
|
|