|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ @6 F; {4 s% i3 \4 R8 L. C$ i" n
#include <linux/init.h>
, J8 g! {1 o) |. n4 r#include <linux/module.h>7 g( f9 o& G: A6 g
#include <linux/kernel.h>* o' R: }: e$ o$ q: b- v& C
#include <linux/types.h>
% g+ B% L" u& c; A#include <linux/gpio.h>
{' A# E6 a! q! D6 W#include <linux/leds.h>
+ @& f* B4 w% U; L#include <linux/platform_device.h>( e6 Y. T; y6 E' u, O
! R! g3 w' w+ i6 H+ T4 `
#include <asm/mach-types.h>
2 C+ {5 h' D$ x ]# N, }. \/ H: s8 V( T#include <asm/mach/arch.h>
, v) e: t7 [7 ?: D( X1 S1 S#include <mach/da8xx.h>
; m# G( U, i* F9 R) e#include <mach/mux.h>3 {$ Q1 ^7 v/ y. e7 O" t
+ ]- t- y6 ]/ b9 ?8 L' O$ B9 o
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- K. t, B, a1 ~6 N4 {#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), i! I2 e3 l* |5 `. f2 P
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 {6 e/ a5 M/ G& y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 P8 Y/ O$ n' r7 I5 q! {& g# {3 V
* |- d* N* e& w9 H
/* assign the tl som board LED-GPIOs*/
0 B" G$ s$ {0 p2 \static const short da850_evm_tl_user_led_pins[] = {, G/ M0 g/ k) Z
/* These pins are definition at <mach/mux.h> file */3 i* x# S6 ~( o, A6 ?2 w4 _! Q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 }$ k/ A& S6 l3 W
-1! Q, y6 d) Y# m# z0 N( {% o
};
5 R1 w2 y+ p2 ~: d. t7 N7 }8 I+ `
# f# D( A3 n* }5 Qstatic struct gpio_led da850_evm_tl_leds[] = {
" _$ ^' b5 U( D8 T8 R+ r! D5 h: o {
: R- N1 h# a2 H0 N .active_low = 0,8 ]( t" I T3 B. A3 o
.gpio = DA850_USER_LED0,9 i6 D% Q) \/ t5 A8 B& b) z
.name = "user_led0",6 `5 d3 m: W$ C n% k5 e
.default_trigger = "default-on",
6 R4 Q4 k! I5 c" M8 M },; p) ^% C( {" Y7 r: w# u& r
{* g" ~5 i( a5 W, g: [5 u1 Y
.active_low = 0,
: B/ i% V& Z" A; f .gpio = DA850_USER_LED1,! _' H' \! C. y& m; M0 R
.name = "user_led1",5 T" O1 n0 K' p0 y' T& g
.default_trigger = "default-on",
# m! W* i9 S- {# t* U: n },
& @* u' l9 x2 _# b0 o m0 B {: h: h2 X1 j& v1 q4 w. T. A3 ]
.active_low = 0,
; E3 p; i( E6 F: q- A .gpio = DA850_USER_LED2,6 D$ P% G8 g) ^* [
.name = "user_led2",
* ^9 p1 {/ t- q% L- n6 O .default_trigger = "default-on",5 T3 C$ Q+ \: p7 U
},
, [* [+ m* K, k# H- M- A {4 B( t' J0 ^1 f# X/ r0 Q. `
.active_low = 0,' i5 z) _6 ~2 ^$ L4 f/ m
.gpio = DA850_USER_LED3,
Q9 k7 _/ t5 @$ g Q4 x1 X5 W7 j .name = "user_led3",
' Q1 ?% g8 @) y* i( {# i .default_trigger = "default-on",
! u5 I6 q9 A$ b2 p },( o+ M" X; J0 k+ G" K
};
2 X! I" x1 I& T' L/ R$ [8 O3 {$ a! y i8 `( }/ ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 T7 T) W- n3 M .leds = da850_evm_tl_leds,
0 T1 \7 n- m0 B( k .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ f1 ^; A, y& K, _! ^
};
* n3 g5 {5 m& V, n* }
6 ~! f$ a' [& f& ^5 O' Sstatic void led_dev_release(struct device *dev)* [$ y: a1 q: z
{( @& M( u$ n1 R
};
T3 @% a$ b9 j7 P9 N2 i2 d7 M9 ~
static struct platform_device da850_evm_tl_leds_device = {
: H8 A3 j1 C/ c- X+ c* K$ w. L .name = "leds-gpio",
8 d) t1 b5 G, c4 w6 l0 m5 q .id = 1,2 |/ s7 D7 M4 G3 D4 f
.dev = {
2 L9 C& o2 f H .platform_data = &da850_evm_tl_leds_pdata,2 g- g) y. {! I- `: O3 G
.release = led_dev_release,
1 H/ g9 [3 r( p9 y }( {- o$ {5 R" a& R% ~% X4 e: ~
};' ]# O0 H: a$ c; L
0 t* j) N0 ~# d5 p7 A1 zstatic int __init led_platform_init(void)
8 k9 A% M) b# t{5 u3 g* q6 V; r
int ret;
% W' r6 d: y: ?. T* E! O; C#if 0& D: b1 g) a- o+ c3 E
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& o5 p# j+ ]4 z/ B# J if (ret)
2 e2 V( h( y2 W: y' T: O/ ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 m0 E/ d$ }& |4 ^) M2 b "%d\n", ret);
/ q7 {" r5 N* q9 e# _/ @#endif) [3 T' ^# N3 m0 H) Q
ret = platform_device_register(&da850_evm_tl_leds_device);% C o1 W# h+ {1 u
if (ret)
$ ^2 L* v& i' R+ n- I+ _4 O6 F9 G pr_warning("Could not register som GPIO expander LEDS");* y$ j: H7 S5 S: U
else
: G1 C* a. j1 e& X printk(KERN_INFO "LED register sucessful!\n");
; Q$ V1 ^% W5 R+ {; g' y1 O) S# ?! r/ z9 C- G
return ret;
) k! {2 y |, C# L}
# c$ |3 X: T- M4 W7 t: ^+ z+ I v c$ T5 ~4 i5 W) a' F
static void __exit led_platform_exit(void)
7 r4 V$ ~+ b0 t{% T0 y$ I3 }# E4 m% y. J8 A
platform_device_unregister(&da850_evm_tl_leds_device);
- f" J; ]% s) l: p+ K1 T, b
& d, A: L* g7 |6 Z ^' N- \ printk(KERN_INFO "LED unregister!\n");
' \- m( q& B1 ~9 ^1 F3 [- b$ P}
8 r" T# P6 S8 { P+ z+ b' C: \
1 q$ ]" K7 _# W `1 }+ imodule_init(led_platform_init);" g" B+ ~' v7 N8 Z8 u
module_exit(led_platform_exit);
$ L8 \) K: W) M- M8 B3 B, f& C* w+ w
MODULE_DESCRIPTION("Led platform driver");
3 f+ z: l0 `) Q$ o; k) b/ PMODULE_AUTHOR("Tronlong");2 C/ |6 s1 A: L8 M- m; a7 O
MODULE_LICENSE("GPL");
/ j1 ]$ ~( @$ W& G
9 F# c9 f4 P0 @* p1 s; z3 d l( K |
|