|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ y5 X5 B& q, i) p
#include <linux/init.h>; K# b/ [: `" Y. m6 }# O
#include <linux/module.h>
6 |& l! T) r. N" ~& y#include <linux/kernel.h>: \1 C5 H. T$ Y) }7 r
#include <linux/types.h>
, m9 h) N& S& p#include <linux/gpio.h># ?5 }" Y6 V0 a+ y* j* g3 i
#include <linux/leds.h>0 a6 ~1 e: F% ~ E: p( D
#include <linux/platform_device.h>
8 k0 z7 [7 y" }2 F* Q4 }0 W5 s$ o2 j' ~! L
#include <asm/mach-types.h>. a& m! d0 ]4 c7 ~* K1 M! F: K; I, p
#include <asm/mach/arch.h>
4 y. x1 M& v) m9 J+ G* S#include <mach/da8xx.h>$ [# X' g! u/ i6 u" k# [( R
#include <mach/mux.h>
1 Q- P0 {2 D4 e. B- I2 B. Q: \9 v- d' k% A' {# y. F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 @& x, v1 m/ |# e& I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! y; L! D7 ~/ R' I+ t$ e9 K9 o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 U9 `# S, g7 X5 V l2 J#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); K) N6 G. M$ l8 c4 i+ L1 F
4 U2 h1 ^( _- g4 |" Q% [$ ] l
/* assign the tl som board LED-GPIOs*/4 C9 z9 J* q( C; j6 \/ |2 u; @
static const short da850_evm_tl_user_led_pins[] = {. j/ j3 p) V2 t Q. L( a! t, I. R
/* These pins are definition at <mach/mux.h> file */+ C. k6 f6 Z1 ^0 O+ h6 f
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 G: u8 C0 a0 ?/ P -1
: W+ V! z9 j4 g- ^1 ]};. H6 ]! s% S% ~& ?, i2 R
6 B! t7 x& r8 l$ _, B8 n+ Ystatic struct gpio_led da850_evm_tl_leds[] = {9 s2 x) K3 L5 v, k# }! N
{
/ w9 u; v% C e, \! q .active_low = 0,, ^' Y* X& h# u4 R2 d9 y' l
.gpio = DA850_USER_LED0,8 `/ F: Q% k0 l! T
.name = "user_led0",) z: f* y8 W7 I' w' E
.default_trigger = "default-on",
( g8 f, h+ S8 h; C: P },
& v/ E+ l. ?$ X( l: d& | {
( [' h% r" T9 j3 l .active_low = 0,( r% s; a+ d; ~% `
.gpio = DA850_USER_LED1,4 ~0 c- `. f2 e" `1 E3 Z& {
.name = "user_led1",$ ]5 X7 {& m U
.default_trigger = "default-on",$ ~( k9 U: @6 b- {4 \
},
5 L. r+ l9 r9 y: M {0 G0 @) b- D9 X: C# I3 N
.active_low = 0,9 V/ {! `8 l$ v1 y* L; O+ w
.gpio = DA850_USER_LED2,6 @+ J+ s( N) Z
.name = "user_led2",
; @5 O. [5 `( v A0 W. ~ .default_trigger = "default-on"," ~1 ^! v0 \9 x+ j
},9 N# U9 {* i% @" V5 U, t
{
1 v1 W" k z' q .active_low = 0,
0 \" r* C7 \: c .gpio = DA850_USER_LED3,
. Q) ^7 G ?, g, B .name = "user_led3",; Q3 s+ n: S5 N( ]' E
.default_trigger = "default-on",
4 l4 w, X5 v. q* Y! t; ` },
o: g, r( x0 C* m+ B" G- Q};; `3 l4 N: |# Q2 W4 u$ @1 _9 N3 K0 G
1 S5 i& x7 `" _) i. V: ] a) nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! u6 p( C" b1 T& H2 w1 ~3 j h .leds = da850_evm_tl_leds,
2 k. J; c- Q+ P1 I! i .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( K! ^0 P. u1 s% A0 B& u$ ?0 Q};
4 Q E0 c+ B* h" Q( ~1 g- F
, S) l7 a d: {, f$ w6 Vstatic void led_dev_release(struct device *dev)
5 J% y! W8 u6 I5 ?5 F{" \% Y* m5 r4 p8 _6 P
};
6 o/ u, A+ Z8 Z5 T% \1 \* u- o7 o" s$ m
static struct platform_device da850_evm_tl_leds_device = {7 w7 l" x) N9 r: j2 k, E
.name = "leds-gpio",7 c/ A) S8 P0 i$ m
.id = 1," @. e8 x `8 u2 g: ?: {5 u# f
.dev = {8 C" f+ w* O5 h3 M
.platform_data = &da850_evm_tl_leds_pdata,9 r! p* P& D6 }; `
.release = led_dev_release,4 u. f- b, ^( t! n+ L: A) y
}
- c% y/ c4 g' T5 s};
5 {$ c# X6 b4 [: H( x* z6 b! V1 U$ J# J2 ~
static int __init led_platform_init(void)
5 R& T$ P# n7 A% `9 r{
1 y$ m" A) K/ |% b int ret;0 Z" J1 g$ c. \4 j8 Y. `- @9 Z
#if 0& H) W5 g4 t. \+ M: Q; W7 q9 A' G# [
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, i2 P. t1 B8 q( }3 O* A3 D: Q/ C if (ret)
, j2 F; i' i7 k, O pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( I m: V( `; j Z1 P, R q6 [
"%d\n", ret);+ n, C" p# ^) q) Y1 H3 q" T1 M6 \
#endif
0 ~/ m! L; ^2 g8 H ret = platform_device_register(&da850_evm_tl_leds_device);! }5 B: P' {8 g1 h& F* Z; `9 L, V' w
if (ret)
! T" c1 a8 C1 N; U pr_warning("Could not register som GPIO expander LEDS");
; Y' S. x% o p. `$ } else
% p: w. t, z% w, p4 \: H0 w printk(KERN_INFO "LED register sucessful!\n");" d9 o( X6 f' U; A$ x
" y) Q2 x5 @5 S( }
return ret;! Q6 q6 r3 S2 i! b6 m0 N/ ^
}+ K* J5 B% H+ |. h* R
. R* s. p- Q9 J8 c% f0 i% g2 W
static void __exit led_platform_exit(void), L$ v$ Y' D# L: M( @% C5 s
{
/ b/ D- L% D0 X* X platform_device_unregister(&da850_evm_tl_leds_device);# s8 V6 W' l2 L7 S0 a# S
6 b. M. b r$ a: _6 x$ V5 U) }! _4 v; I5 o printk(KERN_INFO "LED unregister!\n");
: t5 R( H1 G# ]3 ?}
/ `1 N, d' P9 }. _' }5 R: W3 `* ^: G
module_init(led_platform_init);+ B) S2 b( ^+ S
module_exit(led_platform_exit);- k. r D7 A0 q3 O
4 `* c1 E/ y! ^. ]: o6 P! H4 b m
MODULE_DESCRIPTION("Led platform driver");- g% I4 ~( a% @* d. l% w# ^
MODULE_AUTHOR("Tronlong");
; r- Z. t9 d2 w2 d7 Y( GMODULE_LICENSE("GPL");
3 G5 F( r- k4 @$ E/ Y( ]
5 C& h/ j/ O+ j% ? |
|