|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 {( l" l6 D, z
#include <linux/init.h>
+ A. Y! c. A# {& h- E2 K; {" I#include <linux/module.h>8 V6 x. N& d g7 \( B0 n- {
#include <linux/kernel.h>
. F, p3 h+ @# j#include <linux/types.h>8 [# ]) }1 `2 N* m
#include <linux/gpio.h>
& r0 ]8 a C) I& {#include <linux/leds.h>
* d+ f. q. J; x$ s- \0 {5 V#include <linux/platform_device.h>+ }) f* N& a7 u2 G- v
- M, w6 p7 y1 X( S#include <asm/mach-types.h>7 O9 S/ A9 P0 O; g" @
#include <asm/mach/arch.h>7 {* o, j" T/ h( K& i) x& z
#include <mach/da8xx.h>
: ]% R `9 P V; D P _#include <mach/mux.h>
5 k& I$ d5 ^% g, L4 Y, A- W
% q) h ^) F. P# Y8 v5 z8 Z& \6 F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ Q0 w0 L8 C+ b3 G1 \! a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 P5 I/ _9 O& N
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) [( B. M' S" z l8 J, F! l
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 L; P9 K; \. o/ |$ W
5 I% F8 G7 p/ ?; y/* assign the tl som board LED-GPIOs*/# b' B7 n8 ^$ G& I) \
static const short da850_evm_tl_user_led_pins[] = {( |# \' B/ o, Q% q% g" Q
/* These pins are definition at <mach/mux.h> file */
* G6 D$ _% a4 x; C2 L DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( _" B; R9 B, D) ]
-1( D8 F; @, Q, C4 R* P" [7 |7 U
};* T) Y M/ \5 }
7 r1 R' {" P2 ^
static struct gpio_led da850_evm_tl_leds[] = {2 h; p. K! E8 ~2 U
{9 P: w L: a* i1 V( L }7 O: @3 I
.active_low = 0,- S5 m& K8 Q, A8 {3 \
.gpio = DA850_USER_LED0,# D. y% R2 \3 I% h9 P1 S* ^! d! H; F
.name = "user_led0",
9 {/ Z0 X& y& W: Q ~# D' D .default_trigger = "default-on",
7 R1 D K, a$ W* {2 u0 g },; E7 d, O: |# e8 D
{
( u* s: e: J$ q2 x0 B$ { .active_low = 0,( J2 _, k7 G4 G8 |" U# Z, j
.gpio = DA850_USER_LED1,
$ R: h- }/ J# x6 \% Y6 o! ~8 w .name = "user_led1",
- i1 C( }/ Z6 F& c- v" T! {0 o" E .default_trigger = "default-on",
2 A; N e- p- P) _ },* O7 k! {/ ?/ H$ n
{/ t- k) a1 C4 O/ k
.active_low = 0,, ]) y" G* T( I# a, R9 i. l
.gpio = DA850_USER_LED2,
1 |: b1 ], y- r! A! V .name = "user_led2",, s% D& k7 y/ A# b' C3 v. l
.default_trigger = "default-on",& o) G/ r+ l% `
},
7 q5 ?, Q: Y3 E5 D {8 j0 D' |& t4 _6 }0 M2 [5 D4 n1 o
.active_low = 0,
$ L8 H5 z' ~8 M8 J$ k .gpio = DA850_USER_LED3,0 K! C8 Q5 ]( E8 f0 F! X
.name = "user_led3",
. z1 _0 D4 ^4 W7 l .default_trigger = "default-on",9 A7 R$ y5 n$ k8 D& \
},. ~$ s/ c6 Z U( ]& r1 E
};
* i% z9 ~' A4 k9 s! i0 n
' k9 H5 g6 p# z" ^1 tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* J8 E9 h$ |; z( d$ w0 r .leds = da850_evm_tl_leds,9 u8 R/ D) ]2 `1 U' T3 j
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& z% i( } I n: R( ]6 T: S" T [
};8 ^7 L2 W) x8 O. }: H u5 l" x( Z
' n+ E X6 u4 o! Pstatic void led_dev_release(struct device *dev)4 Q) b7 x% u# y, }. Q+ I
{
5 j! [7 @ s/ Y: O2 T& h& f};2 g, G Q& p6 V+ @2 ~/ b
+ ?: b* h8 P! ^7 S4 }
static struct platform_device da850_evm_tl_leds_device = {- J: ^# z5 S5 W
.name = "leds-gpio",
0 M; c. K- A' G% m# e0 X6 q+ x8 b .id = 1,
$ F$ ]% Q/ x0 |) \ .dev = {* h0 O4 ~8 b& @- X. x
.platform_data = &da850_evm_tl_leds_pdata,
9 }1 j9 e6 u% L$ J' C9 { X0 u) y .release = led_dev_release,
9 N: O( o4 F; T, l# | }
4 N D( h, Q6 }4 v" m6 w};" t! q; P6 @+ t+ S
! S+ K: w0 v* w# G) j: wstatic int __init led_platform_init(void)8 @% Y; m( ]/ ?5 ?
{& d/ W, f7 q; k ]" a B; t
int ret; S* s2 d) C% l# ?
#if 0
+ r6 m# s9 L' V ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. k/ G5 K/ D* x( l7 \+ M) h# M
if (ret)+ h9 i. i. O5 p. m# J
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") @& i, M6 a; W- w( h! a
"%d\n", ret);8 A: R, p Q! _- S* ~! }
#endif
/ { Y3 t% c: @2 T# s: _ ret = platform_device_register(&da850_evm_tl_leds_device);6 c! L. {/ N; T" W$ b
if (ret)
' j* ~/ B5 b- Q+ Z2 L pr_warning("Could not register som GPIO expander LEDS");- t0 d0 x* Z' O: L+ ?2 S
else) `9 F# h' c9 l. x) ?8 u
printk(KERN_INFO "LED register sucessful!\n");7 D# I1 Y4 F4 h- y
0 v5 ~' P# N% ?0 D. @ return ret;
8 W" o S# R+ w; ~9 ?. ?: a}- ?8 d$ B4 U) n" h
5 Q* u0 W/ q3 {7 @: o
static void __exit led_platform_exit(void)/ ]7 p# x" g9 k5 F C
{$ Z4 |1 N _, x# e
platform_device_unregister(&da850_evm_tl_leds_device);. |7 g" K& u( ]. j5 X
4 \: Q: W- a N& x# F/ D8 a
printk(KERN_INFO "LED unregister!\n");
! k; D* X, c* _+ S% N3 X6 o$ h}" @6 V4 g! Y" s. ]( q) K
$ M; b3 V, `0 C& I( T0 S
module_init(led_platform_init);
6 r" I6 @5 u. c/ Y3 Rmodule_exit(led_platform_exit);) q- X/ Z/ n+ M$ n- c9 U* t
4 r; f* j* ?* r2 z; B; S
MODULE_DESCRIPTION("Led platform driver");
8 q/ @6 I$ @0 _- gMODULE_AUTHOR("Tronlong");# ^+ d# |) d7 [
MODULE_LICENSE("GPL");
& i( I9 e1 p# P8 y: j5 w8 i$ j: v: |# Y6 c( p* n
|
|