|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 a* L5 a, h9 M& K+ w- B#include <linux/init.h>* b" Z$ B$ b: w
#include <linux/module.h>2 t$ c/ G5 |- Z5 {; F
#include <linux/kernel.h>' R/ o' G* @1 @0 U# b
#include <linux/types.h>' ]: a/ D2 A5 D2 d
#include <linux/gpio.h>* W3 k. C9 B& J( o2 E
#include <linux/leds.h>
7 [0 y4 S$ t( n8 D' _6 l#include <linux/platform_device.h>
. Q+ M% G) ^4 Y/ }# Y8 m( ]* i' V) z. t5 F5 c* r- F9 m, i0 I
#include <asm/mach-types.h>' R! T0 y* @) Q. ?0 K9 L. e
#include <asm/mach/arch.h>
+ T& Y" Y7 M5 y8 y% I9 @: L#include <mach/da8xx.h>- ]2 m8 l! l4 y
#include <mach/mux.h>' V+ ~/ k: l2 a" A4 ^5 ^
! L% B: M+ B, a# j# g3 U
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 P, |5 d% \4 X+ \1 m" y# J2 [
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% a6 g+ {- v5 Q. a6 J1 y- D
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ u4 E% f' w4 m% e$ L( o* X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& @+ I8 G ]$ y; [7 m' B6 X9 p7 L5 ?4 M Y
/* assign the tl som board LED-GPIOs*/
8 \+ [; ^/ d! M3 u. o' g& F8 pstatic const short da850_evm_tl_user_led_pins[] = {
: B; @' G( I4 a3 { /* These pins are definition at <mach/mux.h> file */$ t a: S u. @' p( ?" R, I
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 ^: e$ G* @" k2 u! G1 Y -1" t1 W! y6 R$ U; N- j9 Z0 }4 Z e
};0 M5 h" L+ s4 k# i
5 ^' V: [. x9 a4 c" l, `: Ystatic struct gpio_led da850_evm_tl_leds[] = {0 ^* s0 N5 u P$ _. f6 T. |' R% @
{
7 u4 }8 p+ j2 J. d. u- C .active_low = 0,) H- p9 y. i. F% {
.gpio = DA850_USER_LED0,
# _& h+ S) s+ R/ H" }% \+ G$ I .name = "user_led0",9 C% u% r: \7 ?1 e, V( A
.default_trigger = "default-on",
4 B2 |" Y* f- z) j8 W: v3 @ },3 J& Z/ y7 a( T; o0 e
{
. j' G" _( l0 W1 N0 ?* L .active_low = 0,
; R3 |) D. v! P( I' X .gpio = DA850_USER_LED1,
+ G; E# R. _4 r: I) r4 [ .name = "user_led1",7 J$ P0 y6 `( z2 K+ ]
.default_trigger = "default-on",' g; c- F6 t3 W5 ^; ~8 }
},* Y. K9 y; Z6 k$ G m% X
{
4 |, e! k. {* {6 b* w .active_low = 0, k2 v. Q& p) k+ V& M
.gpio = DA850_USER_LED2,
6 R$ e) o' C, j4 ]/ e .name = "user_led2",1 p( [6 [/ Z9 O* X; d/ o
.default_trigger = "default-on",
3 V5 F, ]& C! y) Y& F },
- P, k1 C: j5 r6 x, \" ` {
/ i/ j7 t; O, u+ o5 C .active_low = 0,# S# e/ E% r, G x: _* U( r
.gpio = DA850_USER_LED3,& r% V# K: m" P/ o& \
.name = "user_led3",7 [5 Q9 h0 I Y
.default_trigger = "default-on",$ [& } ~" w* T7 ?( ]
},
2 h5 {0 u h8 z2 d- N8 p};5 x6 P M0 u# N0 p
" a# w5 o& a$ ]! s! G& D1 zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) w8 D$ T% |+ U' ~
.leds = da850_evm_tl_leds,1 U& t# b; E! l M0 m' N
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 {4 I- P+ b6 U% c
};/ j0 G! B, ~3 N3 E
* }% e( R7 G$ A% ~: A, z
static void led_dev_release(struct device *dev)
$ }# G2 [3 z$ a# o' V{& W" p! j4 E- l2 K( g* |" `
};. p( y. Z0 m6 P
& F3 Q ~" D! \3 Hstatic struct platform_device da850_evm_tl_leds_device = {- a! v. d. q0 g$ L& }- I& G
.name = "leds-gpio",
/ {/ h9 Y+ C2 Y* O .id = 1,
5 S+ }3 f- B% z .dev = {# S4 k+ Z6 g$ Z; `5 L: Y
.platform_data = &da850_evm_tl_leds_pdata,6 G' d; m; Q" I. ~6 y" s" k, r
.release = led_dev_release,
9 t5 H0 w. r; p: c# f! x, V }: ]7 R; c) }; a3 U1 @/ K6 `+ I
};
" |& `' h1 t/ h2 ]7 N
) A1 T }# i/ k, S9 U3 E: }static int __init led_platform_init(void)
& T, H8 C# r- p6 k. a4 |4 a{
6 _+ m+ \, B0 d* ^' C; z int ret;
6 H5 }/ X# V/ s; r# G7 r; t#if 0: a. D* X- |. A: F1 h
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% o' @( B$ F* X4 l7 L g
if (ret) m+ Q0 X( y. h! {3 H3 J7 q9 g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ B: B2 P0 o d- b5 y) f7 v% H, P "%d\n", ret);' c5 d3 h2 w/ p6 P6 F9 Y0 [
#endif6 |; c) z+ }6 F, E3 L
ret = platform_device_register(&da850_evm_tl_leds_device);
6 ?0 s9 H( p2 Q$ f V if (ret)( [* ?6 X, |6 s
pr_warning("Could not register som GPIO expander LEDS");
2 h3 f2 X7 a) ^; p9 f1 } else
6 G; s8 K- A$ d6 Q: p printk(KERN_INFO "LED register sucessful!\n");- j8 T. P( C/ K% @8 y
8 v8 W8 `+ {/ q8 z y
return ret;
- G& K) T# x6 ^( y K}- q( k( ~0 c F( p
7 s. b+ [8 X0 M! o1 H6 l" c" i
static void __exit led_platform_exit(void)
+ l' [, L5 ~, {; |# y7 N{" Z& O( [" G& v5 |8 l! k
platform_device_unregister(&da850_evm_tl_leds_device);6 N/ Z! e4 l" [0 ^& H
7 O; K: ?9 {+ ~! { printk(KERN_INFO "LED unregister!\n");& i: q3 @* r' ]( v
}; p) q) c* K' _- U/ D8 q
4 I4 `% F. ? u
module_init(led_platform_init);
! w2 t7 X. w% P0 Qmodule_exit(led_platform_exit);
$ q5 z4 h8 e# S* c8 n
% _/ G3 E4 r& r; {: E3 h: xMODULE_DESCRIPTION("Led platform driver");2 i4 B: I7 O" { U# v
MODULE_AUTHOR("Tronlong");5 Z: E. H+ C! w+ z- c% ~9 N
MODULE_LICENSE("GPL");
2 |0 F' }1 |" u' g- K- _
3 P1 T. _! w! u/ X/ z |
|