|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
c( r2 i4 C( \" m6 ?#include <linux/init.h>
/ {/ j1 p4 J4 V, ^#include <linux/module.h>
+ d$ K4 w; {* ~0 J' |; R2 A0 E) c% _#include <linux/kernel.h> |2 G$ d; Z. [4 Y3 C$ h
#include <linux/types.h>
4 H# T( N1 n) f& ^0 m# l#include <linux/gpio.h>
. A4 J2 f1 R1 x% E) o#include <linux/leds.h>
5 d3 ~* S: g E$ |#include <linux/platform_device.h>
* V5 a O1 _8 }
3 c6 h- g- u8 i- E( `#include <asm/mach-types.h>2 e- l' G5 D, w7 `/ b
#include <asm/mach/arch.h>1 B2 F% ^( w: l2 C$ p% M
#include <mach/da8xx.h>
" h8 A, ^- S1 C! N- u#include <mach/mux.h>
O, T1 ^; S& L1 I, _3 p4 k+ J& f4 @0 W+ A3 y2 J6 T
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 F9 d# H! L6 O6 E2 I$ Q- ^% p
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ I0 ?. `3 V( ?/ `* W
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 x1 a+ z* B6 v
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- F R# _6 E9 Q) r |4 u
3 t* A t: z% Q
/* assign the tl som board LED-GPIOs*/# Z) [5 w$ I7 M0 C% ~. w
static const short da850_evm_tl_user_led_pins[] = {
* W. F7 }7 C. `( B4 j$ ` /* These pins are definition at <mach/mux.h> file */6 q# y' V# B1 c
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ M8 Q- z( E* v& W5 v -1! a% h. G9 r9 Y7 {
};# V! T2 x- [, v L" V
, p4 B2 c) w# K' z( N9 L- G( Mstatic struct gpio_led da850_evm_tl_leds[] = {0 W% }, I, a# x. e' L
{, @2 ?5 Z0 b. [" @/ B' |
.active_low = 0,
4 s, ^1 n+ P7 y9 z .gpio = DA850_USER_LED0,
/ g/ j$ i. K( Z .name = "user_led0",# E9 L, s) j5 y6 }2 Y' w
.default_trigger = "default-on",
# T, ?9 ^: r3 e/ T' P },
8 O" m2 g; \. n( r {
, D( C( f2 n3 u: o% ` .active_low = 0,: p9 E2 B# j" ~+ ]8 A! _
.gpio = DA850_USER_LED1,* \7 j3 x# D+ i" z& _, N: x
.name = "user_led1",; S, O" u0 ?5 P8 W" k2 v I
.default_trigger = "default-on",
2 u# p0 U1 ^( m. f7 l5 M5 Z },
, L$ T, d' H. t9 k q! \! ^/ y {
9 t0 E' O P4 e/ D$ M/ Z .active_low = 0,* A' r: {" p% G' d! Z c
.gpio = DA850_USER_LED2,; e8 d: _8 A# n9 J! H; y
.name = "user_led2",: ~9 R8 |8 c) z% h' O L
.default_trigger = "default-on",
% i4 T7 r" ~, ` },
i1 g$ j' H$ l X+ j1 J& ` {% V8 w7 c4 T. w/ n; q* S2 V2 \5 J
.active_low = 0,
$ v0 w/ n( J- j0 A .gpio = DA850_USER_LED3,' k8 ^* C% }- f$ H! ~6 w
.name = "user_led3",
( U" y2 i' c/ L$ @ ^ .default_trigger = "default-on",2 ]5 z/ |8 q' `6 C( ]
},; q# U$ u! y! b* q# h. ]3 i
};. [2 h5 L, A" A) x# P' c s& o
8 t. A, K& C& ]$ ~static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- [3 W. H0 H0 {0 x9 }9 s- N+ r
.leds = da850_evm_tl_leds,( }2 _' a3 f: a6 D
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 s$ }) b$ C4 I% H( a};
2 J/ X$ v' k; |3 P# l) A; w3 b# H0 T, A& G4 `- h, {
static void led_dev_release(struct device *dev)
8 P9 O- N% D1 c0 `5 {{
# `" R9 L. ~! G& ~; B. e};' \, v% `+ m$ `+ A
" r n3 |! [! i, X. t' _
static struct platform_device da850_evm_tl_leds_device = {
; o* l* t: B9 k/ h! e .name = "leds-gpio",
$ Z* \. ^; F1 T .id = 1, Q# ~0 p d$ [
.dev = {
* M1 h2 J, I- [9 S4 u .platform_data = &da850_evm_tl_leds_pdata,6 b8 z5 {0 b! |* |5 o% T
.release = led_dev_release,
4 F; V6 O+ R/ L i9 w( a& q& X$ g }- H9 _+ S" L: Y( h$ |
};" S! w- V: c9 a4 K
7 A1 [/ _8 ~. n$ U2 Y gstatic int __init led_platform_init(void), R( r8 r# d& M
{
! O5 [- d$ T9 J# ~6 H& P: X int ret;
6 _2 Z ? a6 @" F$ c- T% ~8 c% Q#if 0
9 r, c# z+ X7 k8 j8 ]; o+ v! E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 d( P9 F) e' Z5 e) z
if (ret)4 y8 K1 [0 F1 W0 z* M4 V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# y* d$ U' T5 K "%d\n", ret);& Y* |7 k1 J2 M; k; b8 K' B" {
#endif
W V% n: c& z0 T) o6 [7 R, {- i ret = platform_device_register(&da850_evm_tl_leds_device);4 G' Q$ f3 n5 } m0 _0 G
if (ret)
: Z) k! F. s3 Y& W$ t pr_warning("Could not register som GPIO expander LEDS");
5 ?: @- r) s I' N0 n else
0 l! C+ s7 Z5 E* Q1 ^ printk(KERN_INFO "LED register sucessful!\n");" K9 d' G# w/ E
/ q, O5 N* ?& V5 G) |- v6 l return ret;8 s" Y1 G/ [1 s+ ?% H
}5 D0 u. u! G* X5 b2 y
" E& r& m: F l* d+ H( o7 L/ u }
static void __exit led_platform_exit(void)+ p. t) J- p0 M* O) n+ F
{' r: G" z+ n3 k; ] O* q
platform_device_unregister(&da850_evm_tl_leds_device);0 ?) p& o. O/ j7 J4 ~) F! i
& D L3 L" @. p8 {- ~6 E
printk(KERN_INFO "LED unregister!\n");3 s/ w. ?" A4 F3 ~
}4 y$ J" e5 N- W& B; K# f7 }# F p9 S
$ S+ ?4 ^0 A% r2 `
module_init(led_platform_init);
# T; `+ c" `9 {0 j8 p) Kmodule_exit(led_platform_exit);
' o8 ]& G" ?" M' v% ]3 O# L+ j0 w+ h& V) D) E
MODULE_DESCRIPTION("Led platform driver");
$ V7 ]5 Q- e3 U/ _MODULE_AUTHOR("Tronlong");
3 }" i* O: H- hMODULE_LICENSE("GPL");! p" f* T. a: v( d
' L5 L6 V; N8 |5 p5 R |
|