|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ r: E! g( B o x9 N#include <linux/init.h>
. @- r- P8 b6 ^ l: P#include <linux/module.h>
: V+ ]# Y# k1 ^0 L#include <linux/kernel.h>
8 Q- ` E7 _' j& o3 \3 F( E#include <linux/types.h>& s$ K8 ~ O# A& @6 z! P
#include <linux/gpio.h>
) C8 x2 F3 I; R+ r$ l2 m# s#include <linux/leds.h>
8 e! \3 }$ D+ k* t, h0 H$ S! J#include <linux/platform_device.h>
( l" L, S9 G8 }
7 N( l: d# h$ h3 r, Z( s( p#include <asm/mach-types.h>* T4 q& e8 q1 b: R) P
#include <asm/mach/arch.h>
# G' B. ^9 Z( r6 K, ^0 K( L#include <mach/da8xx.h>' r6 ^; B9 D, ~% w
#include <mach/mux.h>
3 g+ J+ U$ s; d% T5 t
& |( X& C4 o( E) {#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% t- ]) F$ ?% ~7 X7 U0 Q7 m+ X#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 _% G- u: L3 D#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 Y, n" p. z6 t6 Q3 @( G* m6 P5 \# h
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 p6 `+ [" a* n% Q& _. Y! H
, R, C6 |* `9 q$ V+ R) [/* assign the tl som board LED-GPIOs*/% d! y' t- {0 A4 F: o
static const short da850_evm_tl_user_led_pins[] = {0 U! }4 l! K+ G r
/* These pins are definition at <mach/mux.h> file */! U* z" q2 w; j! p/ Q8 S1 i! X, [. v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' Y$ C# Q, B0 C' X
-12 F8 M0 A7 u' G* g; J$ q2 Q& b
};
A% R/ k4 t( ^$ k3 |
* K# o( T- \+ _2 t& |static struct gpio_led da850_evm_tl_leds[] = {( ^/ I! H- M3 r: j
{
( m M' A! ]# \& k) `5 C2 ?" V .active_low = 0,6 S/ D/ x7 r: z
.gpio = DA850_USER_LED0,; U3 W3 }* U! I+ s3 C, z$ W
.name = "user_led0",1 {% p3 J/ a6 Y9 \3 I, ]# x
.default_trigger = "default-on",
$ Z* V. |9 ] r$ l- |) `' w },
! J8 t7 [/ M4 l) x) T A {
* F% U: S6 d0 f .active_low = 0,
1 E' e2 @0 N6 a- ?) s& M .gpio = DA850_USER_LED1,2 |0 v4 \4 x* R! m+ V, O, o
.name = "user_led1",! N0 M6 O: x: \0 T
.default_trigger = "default-on",
" }3 G. g# m& [7 e },! w2 S9 h% `) i9 y7 T0 j7 Y
{4 \4 J+ N! D* v6 d& y* [
.active_low = 0,
' p# _5 p! q7 y' Q& w* [5 F .gpio = DA850_USER_LED2,
0 a, N3 G3 f% [, v' L1 j .name = "user_led2",
* Y( ]) B5 z2 j, M n* A .default_trigger = "default-on",
6 ?& X8 |* x' C; V6 H w },, f3 [: d' {% L
{& F S c: @; \. H8 n( H
.active_low = 0,
' I; H @+ f5 l .gpio = DA850_USER_LED3,
0 D9 N( u. k* x* i" H( o i4 d .name = "user_led3",* X; q- A# r9 x9 g7 R3 t
.default_trigger = "default-on",
; M9 H% @* g9 X6 Y; m+ @; g! }$ D },8 \; f" X9 F* T8 W7 Y7 @! b1 Y% S
};
8 p, m# s& Z: [8 N2 ?
" V4 A7 G* r: v, X7 [static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: J" Q# \( f7 O
.leds = da850_evm_tl_leds,
+ [2 C1 u8 \) y8 E$ j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* S! t+ `% [, m- N2 P) F' M
};; J- e2 @/ |( g( t S0 a1 ^- Y: f
# A* s; t: X2 g( y$ H" S/ gstatic void led_dev_release(struct device *dev)* \; T6 Z$ H1 y
{
, ~# u7 F# l$ P+ y7 S};5 ]% V0 E! w# Z) |3 @) b+ Y
: N. T' L6 `* J# b% v# Tstatic struct platform_device da850_evm_tl_leds_device = {
, ^: L: d# r. ~, P .name = "leds-gpio",2 r5 y( S( `. Q3 F, Y
.id = 1,
' b+ n! f. ]2 T2 |3 A I8 G .dev = {* B+ j$ ?4 s9 q, U
.platform_data = &da850_evm_tl_leds_pdata,
* M* q" V: Y C. t9 d* K .release = led_dev_release,
0 y# j6 s3 t: _" |3 [% ~) \9 t. H }
4 b: j% ]; d2 d# g};
+ O6 r' L1 ~" @) i3 A) m1 J! s
# x9 D- S" B; |) u' T7 |% Sstatic int __init led_platform_init(void)3 z9 p9 b3 ?* y4 `
{
/ v0 e7 v. S1 ~4 D1 [: Y8 r9 } int ret;3 Q- Q2 {1 b3 `( }/ Z6 r" K
#if 0& g' J. Z5 Q6 W) ?" n
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ T O5 W; b( p: W$ I2 S if (ret)4 D6 x* P p3 j1 K2 [8 B/ `0 m
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! }+ x! v! Z% A$ u& X& s' i# _ "%d\n", ret);
- C4 j; l. r/ N4 C# X) g#endif1 {" I8 Y5 m: u$ P( O0 H7 S
ret = platform_device_register(&da850_evm_tl_leds_device);& r' b! d, r: B- B ?
if (ret)
2 l1 e7 G8 [& V; P3 I# o pr_warning("Could not register som GPIO expander LEDS");
8 G# `, p- l. [9 s0 m8 e else. [$ e8 l! h2 ]) Q
printk(KERN_INFO "LED register sucessful!\n");
8 Q3 N* e. M2 [5 L8 U+ b' B, W7 M U Z
return ret;9 `- L1 m8 _3 l# c! H" T; e% J }
}: w9 L7 l7 ~; p. n& [6 z
2 I& Q7 V6 J* e
static void __exit led_platform_exit(void)7 M6 M: i) r4 d; o+ r1 a; c
{
$ O* u E$ x8 E! K; O+ ^ platform_device_unregister(&da850_evm_tl_leds_device);8 ], f' e8 G' @" O! Y# ] T2 R: A
3 G/ g2 {/ T5 Y3 P! T9 v printk(KERN_INFO "LED unregister!\n");
$ Q$ o& W/ B% m% p- `: }8 k7 I}
4 E+ a& j* B. h. t
' W$ Y3 ~) u* w; \module_init(led_platform_init);
4 s. y3 x! D* v( X3 qmodule_exit(led_platform_exit);3 T5 `+ o2 ?# X9 y% A8 }
+ O0 W/ Z$ c- a' j% H
MODULE_DESCRIPTION("Led platform driver");
$ {* k: A* W& f- T& [8 o6 @MODULE_AUTHOR("Tronlong");
9 }5 H& r7 X5 c" wMODULE_LICENSE("GPL");
$ {7 S( v( |# n+ y9 ]) F) s: z1 m6 e ?6 U* b# |& V0 e
|
|