|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' [8 [" [ H+ {9 t5 v& b4 K#include <linux/init.h>1 B" x& x7 n+ K' x' ^" q/ K- ^( t
#include <linux/module.h>
% S: `7 b0 s" M6 @: `5 z( m#include <linux/kernel.h>
; U3 z3 g8 V0 b6 y7 R; R#include <linux/types.h>. Y# i7 J. _. `* w) B
#include <linux/gpio.h>2 w) C) \+ O# D$ L5 E
#include <linux/leds.h>- i; [$ d- F7 D
#include <linux/platform_device.h>
* B. E! G6 G1 u! a. G6 j6 q0 s$ ^ m, m+ f1 q, R
#include <asm/mach-types.h>% C4 k- G5 v& v0 u$ C5 n, {
#include <asm/mach/arch.h>$ \8 C7 A7 O" @7 i( a- P% v
#include <mach/da8xx.h>
5 l1 k2 D6 ?5 P#include <mach/mux.h>6 q8 x- ]6 h, o3 O: e* v: ?4 A
+ R! }9 u5 `; o8 a) k3 Y6 r#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 [8 ?& e6 Y7 n- E, v) H2 H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, G) Z2 B8 M! p6 h* _. X% ?#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& k$ Z- P/ e. Z7 T! S5 @0 C( B# l
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 X+ ?7 M- @) }5 Q/ }
4 X9 `. n! ]9 k2 y2 r$ |, v; Y, A/* assign the tl som board LED-GPIOs*/# ?5 Y* v# W+ ]! D0 i+ y
static const short da850_evm_tl_user_led_pins[] = {
' h& ]% K( `. R. h. z) q /* These pins are definition at <mach/mux.h> file */" p& ?, [* q0 I- W- }* t+ w
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ K% O6 Y: e; _, K/ b& G -1
8 |* Q0 n) H1 `" _, T4 G};' m3 g4 r. Z5 ^( O" c8 {3 e- a0 B
, O$ V N8 N% |, l! _
static struct gpio_led da850_evm_tl_leds[] = {
o+ Z. Q) u" `1 ?5 J7 O$ ` {! k3 ~7 _1 ]! c
.active_low = 0,
) v5 g- ?2 A& u( r7 U; D" ?2 d# _ .gpio = DA850_USER_LED0,
" f# K7 T" W" F- v5 j5 i8 u .name = "user_led0",
; R# S( D' g4 Z3 V; \: l2 V .default_trigger = "default-on",' o$ d5 I) z' b2 d
},
% C. |5 F3 ^; M) P3 C& y# Y {
T# Q3 o9 z7 a4 z .active_low = 0,
: J6 O: H' U9 O, b( ]2 E3 T .gpio = DA850_USER_LED1,
3 b5 g8 q1 P5 C0 Z. c" X .name = "user_led1",. a: _! q( ]( w$ K2 k" N
.default_trigger = "default-on",
5 ^& s: l" K+ B, ^ },( {0 m5 u& M( Q, K" e
{) }, P+ b1 Q' u9 @3 J9 t
.active_low = 0,& Y. b7 S( E" x5 p1 v
.gpio = DA850_USER_LED2,& y& y- _% r9 j" q d8 \
.name = "user_led2",
* @! Z4 d# V3 d) A. }: q .default_trigger = "default-on",
) ^# ~. N% s. `( i7 F },4 e4 ~9 f( R' E+ Q4 a: T+ n! Q4 F
{
: I5 E9 g& v3 L .active_low = 0,
9 o+ D3 p# {& s .gpio = DA850_USER_LED3,
; |5 P' w' G0 s. u3 G" t& n$ ] .name = "user_led3",
; h6 G- h' R" |5 ~) M- D .default_trigger = "default-on",( W, M( I6 S6 N, f0 b( k! A
},( b- C7 n+ Z/ s; ^% `! L5 i
};
9 ?/ n. L$ L' i& `9 i7 r' R9 `. ]
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. ^$ U3 p2 k$ F8 L6 D+ o .leds = da850_evm_tl_leds,
R3 v/ m# J1 J4 G6 _ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 `2 z$ b" S: r; T$ X/ U1 ~
};" q6 G( p1 R% G8 V5 N/ Y
( K& s. E# J9 e6 @2 Z4 |
static void led_dev_release(struct device *dev)
7 m5 D6 a& y# V% T{; e% k2 g: f& |. I. `1 Z/ y
};8 u% L9 v# r6 n8 q
7 |( j6 p# W( P: @: U9 j- }3 s/ Lstatic struct platform_device da850_evm_tl_leds_device = {
. c5 G" p' \$ z4 n/ F7 g$ t .name = "leds-gpio",
# @% A. W. \4 B j3 v .id = 1,! V* R# k3 R7 }, p. g! h& {
.dev = {. g; `$ ^% y, Q4 z
.platform_data = &da850_evm_tl_leds_pdata,
; T, l% v# E! Z4 t5 e: b- h .release = led_dev_release,
, J, L7 R1 C& c: D }
" u: t9 P% H$ N6 U) E};
4 s( y. G5 @3 I
% p+ _0 n5 v }# x! _( cstatic int __init led_platform_init(void)7 f3 K8 |" ?" B4 l5 B
{7 L2 u) ~% P4 ?( w9 _5 h
int ret;
. C2 V1 j2 e! i( N#if 0
$ g) D, f9 ~3 q- f$ ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% t t2 n- F) P) `, M
if (ret)
$ Q5 S* u& S) p1 e8 h' v0 f pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ }# X2 L& m0 q5 x
"%d\n", ret);
" M7 C+ g8 ]' U8 T! P6 q#endif: j) o6 A: J1 _0 O
ret = platform_device_register(&da850_evm_tl_leds_device);0 l* p7 [ J9 e4 m
if (ret)
! D5 }6 c/ c6 c' N pr_warning("Could not register som GPIO expander LEDS");8 O& C/ N6 F4 Q# e
else: w# w3 z( m$ J1 G1 f2 b
printk(KERN_INFO "LED register sucessful!\n");/ _& @4 @/ N. H* \: C+ j; \8 t" R
; U) q- g6 A7 K" w6 r return ret;) N2 `" D; ^8 ]0 j" A% b( V
}3 q% f+ }9 C: ~- ]1 d
- K6 N& I; O( J* f( N& G. l' vstatic void __exit led_platform_exit(void)# d- [% n w& C* M
{$ ?7 ]7 C1 d( n }' V# I
platform_device_unregister(&da850_evm_tl_leds_device);+ } G- o. {4 y- G6 J7 t
! ^ ]8 ]6 X( ~" {8 U6 X# U
printk(KERN_INFO "LED unregister!\n");
# d5 V1 ~, J- l}
( l* @8 N k; m2 p* h4 P0 _$ D
module_init(led_platform_init);
, ~! [6 p4 I9 y/ f; Y/ h' Xmodule_exit(led_platform_exit);
) v0 [& ]- w& }) o! q
1 `& x( Y& d% {+ I/ ?MODULE_DESCRIPTION("Led platform driver");
% T# z8 {* c+ j% c- I" ~* \MODULE_AUTHOR("Tronlong");3 d& q0 y) j4 z$ z: ^# l; U
MODULE_LICENSE("GPL");; B! h# P! m$ V3 Q6 `
8 F2 Q5 z; \5 _. X. q8 E |
|