|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 u& E1 \7 k/ g& C. `3 e: s/ U
#include <linux/init.h>
0 P8 m+ l; ~% o# h A4 w#include <linux/module.h>
' y: @4 G( V0 |( F$ G#include <linux/kernel.h>' X7 S q Q/ D v
#include <linux/types.h>
$ O8 \: L9 Z7 w0 K) J/ L#include <linux/gpio.h>
8 }3 g' n' o# k' b4 l' N#include <linux/leds.h>
! e' p, r# e4 }% K#include <linux/platform_device.h>
5 I4 u: ]5 p3 n( o, e# b) q! A& |% J
#include <asm/mach-types.h>
' i P- o$ `; M5 ^& D#include <asm/mach/arch.h>
& U1 b7 O# X$ w5 m, i#include <mach/da8xx.h>$ s3 u: Y) a0 ?, u
#include <mach/mux.h>
/ v/ W1 i/ S8 D5 y/ K$ J* S' |3 E! v$ | ]* u: C* P+ T
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 h v S0 X" W2 Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% h: g. D- I4 u
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- `8 @) y1 J9 J- K1 r6 p#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) O* k6 q; D& u3 D
* Y/ X. M, G1 i, W, q0 Y
/* assign the tl som board LED-GPIOs*/
. {9 W# E& O# nstatic const short da850_evm_tl_user_led_pins[] = {' [+ e: I f& E0 P& @
/* These pins are definition at <mach/mux.h> file */
& ?" T9 B7 D" l6 w) G5 f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* h# T8 Q" S7 m$ _1 E -1, Z3 \$ W9 T' h& K5 ~. M+ n
};3 r# |, r: U- @% W6 u& M& _
{. T+ g3 g( b+ j i) K3 d5 X
static struct gpio_led da850_evm_tl_leds[] = {
, Q" e& m+ ^* q0 k* j {* Z: j1 h! m! Q- v3 k
.active_low = 0,* q: ?* w7 ?# Q; d& s- h/ v
.gpio = DA850_USER_LED0,& Y+ z' `9 T$ w/ O' L8 P- r ^
.name = "user_led0",
: W, t& ], J2 s' J% d .default_trigger = "default-on",
' A: N* g) {7 x7 @& k2 N# Q. w },
* p; f& W, q3 d P- H {7 U1 {5 d3 U2 p, c
.active_low = 0,+ d6 _( q3 n6 w- X4 Z p# ~
.gpio = DA850_USER_LED1,+ r4 u# N! D* L
.name = "user_led1",8 R; C+ Y, X3 N& f1 T) w3 G
.default_trigger = "default-on",
% t0 B* \8 w# ?4 r3 H: s# } },# C2 f& X* E; V% L: M
{; ~7 w) r; Q6 ~7 J# H5 m: }
.active_low = 0,1 h. q0 f0 v" k* _- d9 `) H
.gpio = DA850_USER_LED2,
' w. P: m6 X5 u, E' X .name = "user_led2",
/ l# U+ f/ x1 `( ?2 |3 _1 f .default_trigger = "default-on",
/ F5 A) z9 V+ _( p$ ^! U. D5 S& D },
* H7 V1 x; [/ R% C6 K {
% _/ B- d+ @* V .active_low = 0,2 \2 P q! R3 }' v- U2 R
.gpio = DA850_USER_LED3,, a4 b6 X. w& N+ [0 \
.name = "user_led3",0 e8 Z( ~! w/ q R* L
.default_trigger = "default-on",
! o# i9 W- Q7 K },
# W0 a+ {: t: l8 S' V$ f! L};' T6 C L" d' b k7 ~
$ u* K' h, n3 T. [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ y) ?# ^- s% B3 J+ q' Y
.leds = da850_evm_tl_leds,
+ }7 s2 {6 [0 ]5 A7 o7 f. m .num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ T% z8 ]8 h/ R4 p8 ~& q( a
};
! b% U* D' m/ _7 J) X8 Y4 b* O7 ~8 _9 j i" I9 B7 `
static void led_dev_release(struct device *dev)
: M9 @ _/ b7 u# I* I, X{+ c& d& Q# F. c0 }
};- n0 `# y, C: d& {9 G2 W3 M4 i
: L1 p3 {5 n5 g- m; }0 t7 k( Jstatic struct platform_device da850_evm_tl_leds_device = {% ~5 D) {) F( Z
.name = "leds-gpio",5 P' U& F/ [+ Q2 j
.id = 1,8 Q* X3 i/ z A- v6 f
.dev = {: L1 @, Y( Y% l
.platform_data = &da850_evm_tl_leds_pdata,0 w/ A9 {7 [" u- ~" U
.release = led_dev_release,
4 p- m9 i& Q! D+ m) Y% f8 q; U }$ m4 N7 m/ p7 Q h6 [
};
6 {/ }% s! _0 w0 \& L, Z/ J0 }3 Z; [8 Z- U1 e
static int __init led_platform_init(void)
* [9 Y. x# K z X0 ~* q{, ~4 G; o/ l3 ~( y
int ret;
+ ^4 B9 C. x4 b, h- ?8 Y#if 0
- Q6 h9 P/ n; J6 `5 ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ o ]7 g' |' e D if (ret)1 _6 x0 J& @! M7 H$ R/ B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :", u9 k* X {; q+ D
"%d\n", ret);( R" i" l1 x0 [
#endif
9 g: M, R" P! p5 X9 p9 u' v1 Z ret = platform_device_register(&da850_evm_tl_leds_device);! T$ T; R. e$ {! D- K
if (ret)& D( q' M5 Y( S/ i) k! s
pr_warning("Could not register som GPIO expander LEDS");
! Q% v( o4 Y# d6 J( m% X else5 p/ a! \3 A+ s
printk(KERN_INFO "LED register sucessful!\n");, y# w0 D% a {+ [. w' D5 j3 n' g
- r( F0 L% V' y2 m+ Z4 X- a3 x return ret;* S8 I0 R( Q# t$ c1 F; }4 d
} m' E) N; X& E& p( g
8 p" {6 R5 q7 ~6 n U% G% |
static void __exit led_platform_exit(void)* p% H0 W# A# r0 s6 q y l
{
3 |4 ~% p& }0 H platform_device_unregister(&da850_evm_tl_leds_device);
2 I& E0 p4 [: @$ b, c: n8 r9 T$ T: P# Z# T7 J& ?! k& ?$ o
printk(KERN_INFO "LED unregister!\n");
$ a9 R# ~: N9 b* ^$ Y- w}/ S* a/ X4 ^9 S8 t* Z; ^
: X) d, p: w- J- `4 }' _: ~
module_init(led_platform_init);
8 ] }9 j% s( n' N. T L9 Tmodule_exit(led_platform_exit);! y3 n e0 z+ |: D1 @
# o+ L0 B2 o. V2 K: o) I4 v
MODULE_DESCRIPTION("Led platform driver");
+ K+ q* @4 L: x$ jMODULE_AUTHOR("Tronlong");
$ V" C% M7 K# c* TMODULE_LICENSE("GPL");) Q! i6 p- s2 U. h- x* P
3 I- P) t) l- b7 T |
|