|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% g' B/ }/ Q. e% A! _#include <linux/init.h>
- D+ `. d7 F: s' t3 T6 O) z Q#include <linux/module.h>8 j4 |+ N3 ?) I3 R r5 R
#include <linux/kernel.h>, O8 Y6 C" r5 p) _4 r' p1 j# z
#include <linux/types.h>
5 n' O/ c& L5 `0 s" L4 N# T; {#include <linux/gpio.h>. Q8 {( I0 [. R# `
#include <linux/leds.h>
7 l" S* ?% h' O1 q. b# A6 _- j#include <linux/platform_device.h>* G, I$ _+ p: [, p; P
1 p. i7 x, P3 {5 {- m#include <asm/mach-types.h>
$ Z) I! A+ K6 w5 v6 V7 U- I#include <asm/mach/arch.h>0 f y* B% y. g
#include <mach/da8xx.h>% K1 L2 W5 X; i0 t2 F5 v: t6 a# c
#include <mach/mux.h>* D* x7 S" |% I/ a& Z& `
$ ?( G& i6 ~7 {; K
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 E2 ?# T1 d! e
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 b- J, _) U0 u2 F( r: B0 e+ a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( l! [) ?; N7 c$ r0 D& |0 |1 o#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 L1 A+ r P ^' G5 w
2 J+ C- Z' G8 s7 I
/* assign the tl som board LED-GPIOs*/; [& R; Y+ Z2 @
static const short da850_evm_tl_user_led_pins[] = {: y8 }* b3 R7 l; x$ ^9 P
/* These pins are definition at <mach/mux.h> file */0 c% e! u9 H2 k. {; p9 Q. r
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 v. a8 ^& G4 n; O8 N/ I: f0 u
-1
" C3 b9 o% i' ]0 G2 y p& C5 T};* f+ \& P7 i9 m% h+ ^) Y3 B
& O; ]9 V, w1 b
static struct gpio_led da850_evm_tl_leds[] = {: _4 v1 W& l( H, t! P
{, j4 s, D8 Z. A, a, }
.active_low = 0,9 J6 M+ ?" E( u, t. y
.gpio = DA850_USER_LED0,# _7 P* [" Y+ |7 @- u7 E
.name = "user_led0",
- o4 \% D$ j! M& h+ Q .default_trigger = "default-on",) B w, L, o* Y5 K' Q
},
; f' v- [+ K* o# O2 { P ^( U {' o5 ^" E( w2 G' s6 S
.active_low = 0,
& t `4 C4 \2 Z1 ^3 I/ D' d: f .gpio = DA850_USER_LED1,5 Q$ S; h9 @4 k( ]
.name = "user_led1",) d. J( u6 |1 ?; Q" h9 L" p
.default_trigger = "default-on",
+ w* ?" L* M9 X' R }9 {! { },6 b. B% V- d2 \ z
{
0 X$ U3 B; n7 L& [ .active_low = 0,
, F# E6 K) J3 R$ o1 ` .gpio = DA850_USER_LED2,
5 o7 I: w. V b! X3 P: N .name = "user_led2",
: f1 C# k$ K% D .default_trigger = "default-on",
9 F% R) q, R# i$ z! Q$ [3 W* V5 ~3 _ }, |4 y# ]' `; g: {& B5 [' e
{* y O+ d; ?' h+ G$ f
.active_low = 0,( L }6 L6 N$ z. r. U
.gpio = DA850_USER_LED3,' u2 g( E+ X9 L4 P; O. |
.name = "user_led3",; j7 R) n8 {# C
.default_trigger = "default-on",
3 V1 [* R) o0 p% @/ l4 H( D },
. v! Y S8 G0 ]. Y7 q/ W4 P};+ V5 v- f8 ~$ y, p# f
$ V+ @# w7 A3 Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* K; K N7 H- a+ p3 e8 g+ q
.leds = da850_evm_tl_leds,
. T' J+ E) L/ q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 u" N3 H1 a& [
};' L9 t/ t6 C9 e+ n3 N
5 p# W M# H2 Z, e; Q
static void led_dev_release(struct device *dev)
2 q6 L9 o7 G5 l8 g{
. _1 {9 `$ }' ~- M};
6 t& }( R6 H8 h7 [' l* X, n
. s6 S9 i+ `# m2 zstatic struct platform_device da850_evm_tl_leds_device = {/ b; @ `4 M1 r& D
.name = "leds-gpio",7 @2 {* H3 [) }3 G5 c
.id = 1,! Y6 I. w8 Z6 Z1 {5 Z/ F9 `: c
.dev = {
o2 ]! P8 U. Y/ z; f! X5 h .platform_data = &da850_evm_tl_leds_pdata,( i4 ^8 _: k$ q: n
.release = led_dev_release,
9 ^- v& g: P% C0 n! _9 D }
" i7 H0 m$ T$ p) G7 b( H};
/ t; H/ ~8 P0 D3 f3 ?0 \, ]8 E( Q7 g
1 L+ H- C: k' _static int __init led_platform_init(void)1 ?6 F0 Y; G4 U. w% t: k
{5 l( Y% N! K* X' R9 }
int ret;
; u8 K A: o D4 W, J#if 0
8 {) H6 [$ w; m0 p: T* ~& b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 [# F- E# d' _9 P: X9 z, M if (ret)
6 U6 u" y$ y* z) W/ j. [4 `1 T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( |! p! e3 Z3 R
"%d\n", ret);
; B, \& J; U% j4 M) {1 ?5 u#endif0 }% G3 G0 @6 F+ U
ret = platform_device_register(&da850_evm_tl_leds_device);
- a" _* c. Z/ ]: w( c if (ret)) |* M3 x3 W9 {
pr_warning("Could not register som GPIO expander LEDS");* w6 I+ f6 p; P& y
else" q) s. |& s( k2 N* F1 }
printk(KERN_INFO "LED register sucessful!\n");9 ^7 B7 n" y; s' r3 o2 l/ m8 |; O4 ^1 j
& f! z& j" f& ^0 a& e return ret;/ B* S' r9 Z0 d: O7 y y
}
" N1 }, Z, ]2 O4 ?7 U2 w8 G6 O6 e% R+ x
static void __exit led_platform_exit(void)
) K! ?/ E' r% n4 [1 g1 t, f{7 t1 ~2 p6 I2 s- h( t* W6 F
platform_device_unregister(&da850_evm_tl_leds_device);& l1 T, Z w3 v7 r6 p+ l
2 e4 I; D Q& u. i" ~ printk(KERN_INFO "LED unregister!\n");9 [" O% J# y1 ?# s. m! ?* | w
}! X9 P9 v1 T& F5 _
5 D, g4 \+ G, E8 ]
module_init(led_platform_init);; z9 `4 k; j5 ^( j& o$ L2 P P
module_exit(led_platform_exit);
: u. _' i" U7 ?. P, A. B+ H
0 y+ B2 q$ a( x- A1 x& wMODULE_DESCRIPTION("Led platform driver");
- v( G A: K- n7 ?- h, Z; Y9 \+ _MODULE_AUTHOR("Tronlong");
5 p! J+ e, t* _# c' GMODULE_LICENSE("GPL"); S8 v2 N0 G9 F0 }- f
: c7 X7 Z+ }- E1 A. o/ x, H1 p |
|