|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 H2 X. n- Z* U0 B9 m. X
#include <linux/init.h>( O0 z6 O- \+ C0 {% d: b( O5 J
#include <linux/module.h>
' P d4 C5 b( `$ F4 n9 y#include <linux/kernel.h>6 |6 `" O' E: @
#include <linux/types.h>
/ V% S( U! I) t: Y7 ^9 O' I) S& Q#include <linux/gpio.h>
2 R$ L- M/ H" e7 j#include <linux/leds.h>
6 R: }' f' y4 W5 U$ b$ n5 _# H#include <linux/platform_device.h>$ \, z& r/ ?. d$ g. {
7 e& r: z. I) f
#include <asm/mach-types.h>" {3 h- z" h9 h5 p3 ]- ?
#include <asm/mach/arch.h>
5 B$ V1 n7 `9 H, ^8 Z+ F#include <mach/da8xx.h>1 ^- q# N/ t7 T' |& c- U: ?
#include <mach/mux.h>; V. O- a/ K; y
! t. }( _! z2 T. \6 ^) ^2 ?1 O* j, o
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 ~" C4 }! Q$ j) `#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- Z# x& N3 Z6 q0 q; [6 O' m
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 a7 N$ M7 ]: q$ @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% B/ ], e; R* E5 W4 G
# k N; [, d4 ?+ @, m9 t/* assign the tl som board LED-GPIOs*// M! }% l" Z& l& A3 R
static const short da850_evm_tl_user_led_pins[] = {
8 y# B. R# `3 m: ]: a /* These pins are definition at <mach/mux.h> file */* {9 a: M2 _/ K8 {- h# I
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," y/ Y2 W; {; |! e
-1
* X2 w j' }# p, f: P/ s5 j};
; i c/ q% j5 i" z' n" ]) ^+ M: n4 G0 _ @( k1 L4 N# l
static struct gpio_led da850_evm_tl_leds[] = {
: e+ u( M) ^5 ~- g {
' M1 I) H3 P5 g2 N4 p! ?& p .active_low = 0,: O9 K0 W0 j7 H8 S- i
.gpio = DA850_USER_LED0,
$ @9 T/ ^3 ?. X9 @8 f8 Y9 p .name = "user_led0"," E' f; p$ J" @* x( l* Y. d
.default_trigger = "default-on",
$ I' y) h7 G$ z },4 u, U2 j* B+ q6 W! h( W
{
0 B4 a2 f2 w6 `" B% e3 l .active_low = 0,
4 G6 y ^" N, S( _ .gpio = DA850_USER_LED1,: m" y0 C7 k% Z) }! l1 {
.name = "user_led1",4 B- t% \' M( d' I( t5 X2 P
.default_trigger = "default-on",
) ^6 m d) I* _1 c$ o% X; E },
7 J1 T& H1 ^+ p {
4 Q) o" O" c5 F .active_low = 0,
/ C7 e6 U8 N. L ?) r7 Q0 T0 A .gpio = DA850_USER_LED2,& u9 b7 ]+ c! ] h, @+ H
.name = "user_led2",
8 H. n2 V! _$ n1 U; i, r+ S .default_trigger = "default-on"," z0 I! L2 N) o4 S3 P7 R5 }
},* O/ m) h/ d. h6 U' v) p& C
{
; ?1 c# Q( ]. _) Y .active_low = 0,+ q9 m7 V. W6 d8 y+ z% L1 H9 b/ P
.gpio = DA850_USER_LED3,
& f0 W- F7 \( I .name = "user_led3",
3 _2 }. o1 o) M* \1 o# ? .default_trigger = "default-on",
- F( G, ^/ i1 o' w2 r# \4 h( L },! V7 a9 q5 M. g- \* E' x
};. j" q4 i* \6 l+ n) {* ]
) q) P( b3 x1 u! ^( dstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- Q; Y1 \9 v% R$ w! e1 {# U, n/ h .leds = da850_evm_tl_leds,: m" C0 g e. r! j1 M
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),' j$ g- z, |( z0 x
};. Z" K# @. i, A4 i& J
. H% k' g! n. w/ `! c+ n0 u
static void led_dev_release(struct device *dev)
# \3 t/ V" L% A, Z1 l% `: P9 s: A{
8 e) ]! V1 u$ T};$ w0 a8 n& L8 w: } G" M
7 v; ?9 D2 _" b, {7 _5 R+ W( V, _
static struct platform_device da850_evm_tl_leds_device = {! m1 f9 }$ n1 P5 R- |( X0 H
.name = "leds-gpio",% @5 X9 U) Z) M9 r
.id = 1,
. H7 q; b; z! t3 ^ .dev = {
- Q# ~% D, L- v .platform_data = &da850_evm_tl_leds_pdata,5 P. F# v; \5 n$ L( q3 k
.release = led_dev_release,
* j( ~- _1 _2 i& B/ J) @ }7 q0 @. h; H7 D- O7 _! n8 g
};
% O8 n: M1 f9 m$ g" G5 X( l0 ?% b% y8 p# ^1 {7 W
static int __init led_platform_init(void)# N' b' J! C8 g: H, P% Y
{1 V( C. y" w) y
int ret;
# F: L) Z% ?; m$ c, Y9 b5 `#if 0
0 }# Z4 @* Q- O6 r# B3 w ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 B0 v) a* H5 ^1 `% C if (ret)
% z2 ^- G6 u. e! ^) H; @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 K5 E% ?# Z( |/ W. q7 j
"%d\n", ret);9 C- }% O2 n& t4 @* u/ @2 B. D
#endif( w3 ~' B8 u& v9 b5 ?
ret = platform_device_register(&da850_evm_tl_leds_device);3 d& X" Q0 H+ P, s# |
if (ret)# I5 X2 G4 I3 |9 e) @# ]
pr_warning("Could not register som GPIO expander LEDS");
. d% v- G ^4 J4 e* }2 P: c H else
y2 Q/ N* c& ~8 j printk(KERN_INFO "LED register sucessful!\n");
4 ~4 V+ f! P. f, i: a2 v8 ~: Q9 A2 R( m1 g+ J5 ~5 ~. V+ w0 W/ w
return ret;8 h* O3 h) K2 _, h0 G7 o3 c
}8 n m5 f; ]5 n9 C. \0 F
( d$ @9 M: R/ i% b
static void __exit led_platform_exit(void)
/ T$ [) J# ? o& I{
& a) z4 F o. M: c platform_device_unregister(&da850_evm_tl_leds_device);3 `9 |% e6 q9 g$ i6 v
8 I' F) F$ _/ W7 P' g9 L/ _ M$ e printk(KERN_INFO "LED unregister!\n");$ C M- R/ c% A4 U C8 V/ f4 }
}) a# B) o5 V( r; F9 K
2 e# r$ B. L* q! ?: k+ a n% [module_init(led_platform_init);0 u. t' H* g& p, `
module_exit(led_platform_exit);
; g: q% H6 B2 G4 g% ~1 T8 u
4 t3 c, j; `/ w7 iMODULE_DESCRIPTION("Led platform driver");
0 Y; E9 B) n& F6 I; YMODULE_AUTHOR("Tronlong");+ o3 M& e2 B, U* F
MODULE_LICENSE("GPL");: ~- e* B1 p* I* h& c! Q* T3 Y
: |9 m: {* K) l& x |
|