|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 W" ?, ?, w4 F. J#include <linux/init.h>
( Z2 h8 S/ l i$ i8 U7 _& C: j#include <linux/module.h>
1 u' R2 X1 X) c/ I1 Z1 L#include <linux/kernel.h>
% O& X/ [1 Q1 M& [0 k5 H#include <linux/types.h>
" ~2 F- D. K% Y#include <linux/gpio.h>
7 f8 _% g9 T' y#include <linux/leds.h>
1 f6 D% Z! T. v- w3 a1 w/ y#include <linux/platform_device.h>/ g- I1 b$ d6 w0 u
+ W+ b: z8 I0 W% L! X#include <asm/mach-types.h>, |0 V! b q) N l
#include <asm/mach/arch.h>
% F0 x& l! r! v! }+ {/ r2 F#include <mach/da8xx.h>
" a% z; E; x2 K9 g1 \#include <mach/mux.h>! J& U5 X( `0 Z# R# o, k* b$ u7 P
& [; c! H" u* p+ X" r5 ^#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& n& E+ a6 V7 m6 o% ^1 o#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 u. h) A1 v$ v- J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& H, \& O4 Q1 {) a A! }9 u#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ I& {; C+ a2 j' l* P$ `
3 c, a9 |, N" @( ?, Q. e! }/* assign the tl som board LED-GPIOs*/
$ Q% ]; \' n A9 ?static const short da850_evm_tl_user_led_pins[] = {* q+ z( d& ]! D1 J( o
/* These pins are definition at <mach/mux.h> file */! B+ S, P$ `' n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 u( H8 Z" \" Q -1
; p8 V8 ` l1 ? r4 V) t" k};2 {6 t' U) n5 O, [% w
! s" v- C9 y9 s" t$ s( Pstatic struct gpio_led da850_evm_tl_leds[] = {
! w1 s" C; b" q0 E {
, x8 G1 c( ]6 `" ?2 O .active_low = 0,. a& O+ y( M. G* w
.gpio = DA850_USER_LED0,
* ^1 m1 U* f# m R7 o5 r' _: { .name = "user_led0",
# {3 G" ~( B5 F& {* y | .default_trigger = "default-on",/ v0 V* J) v% W; K
},
8 d8 F- Z) I2 U& h+ ? {* ~# I; G7 [$ C5 u, D3 }
.active_low = 0,0 q( X, j. Y/ s, }/ `
.gpio = DA850_USER_LED1,
6 I0 B3 A, ~) X: I0 ]) | .name = "user_led1",' S/ T. L }* f8 D E
.default_trigger = "default-on",1 o+ `* R* l: s1 s9 m
},
) J/ a# N0 |) U6 h8 Q {
" X- F$ B. w" `% O$ D/ u K .active_low = 0,
& _) U5 x: U: h .gpio = DA850_USER_LED2,' y0 _+ t5 {5 O
.name = "user_led2",
# S4 m7 p M" {. ?7 @! V .default_trigger = "default-on",
, T4 Z% |! q T, m8 f- ? },. W+ f- d5 S' {- S
{
% m9 D5 N) s* b .active_low = 0,5 Y$ `! T/ C# b: K) h5 `
.gpio = DA850_USER_LED3,
( j7 R0 _% Y* z5 h/ t. @6 c .name = "user_led3",: S% U) m3 J+ e& C( d
.default_trigger = "default-on",1 `0 C& Z" z' r# `9 j
},6 y6 a6 E \' W$ h0 }) Y8 p8 c: _
};
) F7 ^/ z) k) l5 B9 k& }0 i
. H% ~ p) w0 F Astatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 i% S4 i5 Z# W! O$ T3 e0 Y
.leds = da850_evm_tl_leds,7 z3 W8 x% X1 A" j8 \5 I9 Y1 S5 Z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
Q; r( Q4 {: `};! P3 G) i& c# d8 p
: b- K6 I8 O3 @% e# Bstatic void led_dev_release(struct device *dev)* a* D v: Q, \4 b) y! b. i
{
8 }4 t; a- I1 }0 c};
7 u# y" F5 ~# t5 J! T- V# i- C4 F
# M% w; x( V" q1 Vstatic struct platform_device da850_evm_tl_leds_device = {' V; G1 v" x/ A2 J! z
.name = "leds-gpio",
* P; S8 _( K, L4 R5 a .id = 1,
, q$ | ]+ g) a( p% e J .dev = {% {% F/ |8 c' l2 @/ M; N9 x5 W
.platform_data = &da850_evm_tl_leds_pdata,' J( o" X2 H M+ `% l% b
.release = led_dev_release,
. M+ Z! r M. V% n- ^ }
5 A8 r1 o! V4 U; I; @$ j};
9 b3 {1 ^$ z9 L; [% r7 _0 i, s" b/ k8 @ y' X4 o
static int __init led_platform_init(void)
2 A# ^0 u' m. b: u+ |( k; E0 A- m{
) `+ j L$ Q0 P' {- m* S int ret;9 {: V6 R q" r1 ~9 J' J5 s# B
#if 04 M, W" Z, ]3 `( r8 Z- R: V/ C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# y2 ^8 [" V7 ]& f if (ret)( r+ F& N0 O) U! f" q8 ] t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 i6 x2 Z$ M& C4 q, u5 F5 p
"%d\n", ret);
' v: s- n$ x) y$ A#endif
; ^1 i) ~0 u% B8 r' o* B ret = platform_device_register(&da850_evm_tl_leds_device);
1 j( ]* _# p y8 P/ \. p if (ret)
9 T; C0 W) H7 H: A) F pr_warning("Could not register som GPIO expander LEDS");3 P0 _) o9 W D1 j9 q' V/ O
else
+ E: @9 c) b9 ]% U6 H printk(KERN_INFO "LED register sucessful!\n");
6 U1 P0 p3 Z* ?% p3 n# G
- O8 B) x! P, j+ r4 R0 J return ret;) Q! ^8 J* @- j# `
} L& R1 n8 r+ d9 P" S
" a- v# f5 Q K
static void __exit led_platform_exit(void)* J# |+ }: [. {0 G
{
s3 Q( Q& q; I. `% H. q* _ platform_device_unregister(&da850_evm_tl_leds_device);4 B z' z8 a( S! J- X' n; F
* u# `& Q7 N& t4 l: l: S2 S- G0 v
printk(KERN_INFO "LED unregister!\n");
9 ]9 {. o0 S4 P}
7 L# k( z A) W: d4 z% C/ b
: e- k5 c+ s7 p/ @6 l: G6 }module_init(led_platform_init);0 \. I! @' p% g' [+ M
module_exit(led_platform_exit);
5 @3 M+ k Z1 h3 t, I j
9 Z9 ^( E/ z$ gMODULE_DESCRIPTION("Led platform driver");
; r7 n) p2 W3 d' s+ s3 EMODULE_AUTHOR("Tronlong");
7 `0 u9 w3 ~( h* p7 [. O& pMODULE_LICENSE("GPL");9 X' w- W! t1 P# _+ Q, X4 I
4 a4 T! G& f+ i0 i V$ b& E
|
|