|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% t" g5 r& H8 J#include <linux/init.h>
9 F2 y7 ]8 P5 z! _8 n* A, T8 ^#include <linux/module.h>
, x2 G6 i6 K; d9 o( P8 ^#include <linux/kernel.h>
6 F: W0 x7 c3 Y$ ]2 v% [2 F#include <linux/types.h>- @* r3 M& G. }+ ~, ~
#include <linux/gpio.h>7 C+ _; Z$ ^2 H. B; D5 S
#include <linux/leds.h>2 o; y/ [1 B2 J& V8 |5 h7 o6 X8 t
#include <linux/platform_device.h>
+ u& ~( i. }- M1 ~1 q7 y) Q3 B0 }) O
) U) y, r8 i& i3 a" |1 g#include <asm/mach-types.h>' P9 j; j" {9 N; X4 }' J; o+ l K
#include <asm/mach/arch.h> o3 S- R) B( y: D" w
#include <mach/da8xx.h>
' j4 K/ O! x4 i* r#include <mach/mux.h>- P& u% U8 {4 L# k
" N3 T& l! P: Y V
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" b, b5 v2 z2 V! Z8 Z* q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, h2 _# f. F) Q) w3 g8 z1 a" j, b#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ p! w, [: q! g8 o$ g. `/ O
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 d5 k; l, P: A8 L3 O. o$ q. o
) s! _0 }+ N! r8 W/ p( B/* assign the tl som board LED-GPIOs*/
G; h" i o) |# T8 C' J5 R! Wstatic const short da850_evm_tl_user_led_pins[] = {/ z( b! E: u( p4 f6 w
/* These pins are definition at <mach/mux.h> file */
, F* e2 N* p0 T# G) \ a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: ~5 g n6 o0 o8 I6 z
-1* P& T6 ~, G' C8 N' ]* x
};: ]# \# {% u% R" p5 r/ e
u) I f' d9 T4 i& a+ ~/ L# g2 qstatic struct gpio_led da850_evm_tl_leds[] = {
- f8 {1 y% O- P; O% V8 g9 C {
; }/ U& h8 U& w .active_low = 0,
0 j% A4 y7 X! o! F .gpio = DA850_USER_LED0,
! f6 l; o n4 K .name = "user_led0",* s' |1 y, X. d" K, O
.default_trigger = "default-on",
" \4 q9 ~, k5 j2 d, x( M },2 Z+ x4 o$ f4 H4 b- _3 l
{
5 ^7 m: `& u- Z' J .active_low = 0,
/ W% o' Y) [" X# K .gpio = DA850_USER_LED1,8 f6 `" m% ?9 w) F$ j4 ^
.name = "user_led1",% v- `* W( L G; r
.default_trigger = "default-on",% ?' t" S' l$ [6 \8 n
},
; J X0 N. H2 ?: ^6 M4 F k { |4 W# s: U. C# u6 i
.active_low = 0,
8 F) G7 ^6 [! i8 D .gpio = DA850_USER_LED2,
8 n2 K. m: I$ }: {4 Y+ I .name = "user_led2",& q# o* L. y/ W; s+ ^1 t3 ?+ Y
.default_trigger = "default-on",
) T0 q+ J' @& R/ @+ w* D: B },* c/ r O8 g5 U9 Y' E
{
' r p1 k$ r% H& S6 s! {/ P$ L j .active_low = 0,
' k! q% n* }& V D& _ .gpio = DA850_USER_LED3,
( ~4 W; S& a$ s4 ~- _ .name = "user_led3",; w& `& n& @# [( ~# S
.default_trigger = "default-on",
/ \5 w# N' S& U3 N# u% N T },7 o) O1 F7 A ?& ~4 o
}; z k+ X ]* c& _ q/ x
9 s8 p9 p; S+ z" c3 c0 [2 M9 Y- Zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: i# ]4 C' l/ h4 Y .leds = da850_evm_tl_leds,
4 a* B, ^* e: c$ h" [ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),& _. j; Y2 b) K/ e
};0 N* A" k5 L6 f6 x n$ H
2 B- U/ l; q7 _
static void led_dev_release(struct device *dev)
/ B" p. V; q$ ]6 E9 X6 h{4 U5 H3 p" }- R
};/ l5 [& b" A, q/ q! [' ]
8 T! v% v7 S# V! |; `7 v# W* Istatic struct platform_device da850_evm_tl_leds_device = {# X+ h8 ]0 G b* e6 A9 d
.name = "leds-gpio",7 w0 }* S8 D1 R' i
.id = 1,1 j# }/ s; j; `1 q
.dev = {
7 F1 F4 ]& s' P/ R7 W( N .platform_data = &da850_evm_tl_leds_pdata,( W# M2 P/ ~% }4 q C" s
.release = led_dev_release,/ c7 G- m: M0 B, p7 B
}
9 S; T) C1 z- Z% m6 w' E, Q; o};
& J+ {7 Z e" U" q& X
; ^: C8 b2 x4 V7 f- x8 Bstatic int __init led_platform_init(void)1 E7 R1 j3 L7 Y/ z! ~0 V% S
{" C9 M2 c9 \+ w
int ret;
; k$ o/ S/ Q* @* g4 Y0 H#if 0
9 r! s5 H$ `% Q) } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( V5 H* }% D( G- w' V- h) f if (ret)
$ ?. M2 o( q/ c; J pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" |- h! W9 w# d( \; n "%d\n", ret);
* f& M& K9 {( c5 @) M: b0 @4 v#endif" n1 l0 B8 l, O9 u5 ?: c+ O" a' C
ret = platform_device_register(&da850_evm_tl_leds_device);
$ ^- [* d# |( }$ Z/ ~ if (ret)
3 N( O5 D: F/ G. q8 R. Z$ N pr_warning("Could not register som GPIO expander LEDS");
/ ]5 [$ ]9 V# i& s7 ` else
2 d2 ]0 k3 a4 r printk(KERN_INFO "LED register sucessful!\n");
+ A$ k8 ]; B/ z' D, Q$ k# |. s& }( M0 U8 H
return ret;
! A, |6 X8 V+ m0 m/ L v/ @. R C}, _, G e! _9 n9 h: H
, F& M6 v6 Z# @9 c6 ]; U* k, ?static void __exit led_platform_exit(void)7 ^) I8 ?: h! I j) u4 i
{0 R8 L$ Z0 Q8 b' R- A
platform_device_unregister(&da850_evm_tl_leds_device);; z% o8 f# a" J
$ D' X8 H3 w* P \* \5 Y8 ` printk(KERN_INFO "LED unregister!\n");
7 E% I1 |% u+ r: n}
8 V$ P+ M$ Z" s
: U$ g6 X% v5 ?module_init(led_platform_init);
8 ^4 o8 S6 ]6 ?! ?6 Lmodule_exit(led_platform_exit);* t* `; Q' i- B2 e8 w2 P! D3 u/ g
1 u: C2 C/ p+ e7 ^8 y) S
MODULE_DESCRIPTION("Led platform driver");
8 d4 a& T9 o7 n) p7 A! g" J% z( M7 p( pMODULE_AUTHOR("Tronlong");
6 |7 ~! O% ]7 }, hMODULE_LICENSE("GPL");
6 F: ^" i( _% n9 \' c9 G- i/ E/ H0 d9 ~; r" k
|
|