|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& T: t1 L3 L7 a- z
#include <linux/init.h>
4 I4 S* U" m1 ]/ y#include <linux/module.h>1 k" q( m5 p* C* @
#include <linux/kernel.h>
9 m, r: q# @9 b& { c- D |#include <linux/types.h>( M) _4 q6 m1 |7 \
#include <linux/gpio.h>
7 R! w$ m3 R) ]: A% I' b! |' z#include <linux/leds.h>
- C! N& x A9 L#include <linux/platform_device.h>( O" \/ U9 c2 q3 L
: T R6 X3 k; h9 p3 }
#include <asm/mach-types.h>
! x& r/ j4 T$ d V* J8 s, L#include <asm/mach/arch.h>. @$ G' y* q/ a! V/ G/ r4 S
#include <mach/da8xx.h>; o2 L9 e% j0 I2 S, k8 r
#include <mach/mux.h>, F1 f0 I8 I4 P7 r' k8 ^
) }7 C% B1 k9 z2 ^2 t8 e0 K
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 }. R; X6 x* N/ C3 u$ o. h
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 p7 W' P" _) d+ k2 n
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ B, U& W! O" d: _
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ k5 ]3 x5 h, N" l: a! b2 s$ ?$ i: \* n. U8 c$ ?
/* assign the tl som board LED-GPIOs*// t. z& v" n% a1 g) m& H7 V" E3 D* j
static const short da850_evm_tl_user_led_pins[] = {
/ v1 v5 F$ B2 v+ l /* These pins are definition at <mach/mux.h> file */7 z7 d2 A0 z p0 r
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# L4 R5 W1 `1 B6 S6 f; r -1
- t& ~9 E" G+ z8 u};
% a* l+ y' z' E/ ?4 n" j
* |5 `( v$ N( t4 d7 u7 Rstatic struct gpio_led da850_evm_tl_leds[] = {
3 {# e3 A6 F, s) k$ \ {
- z! J6 c' ], P) k+ t+ W6 f .active_low = 0,
& I1 R7 p/ @% u- U: N7 ~ .gpio = DA850_USER_LED0,. w2 o4 F& E# o( K# \
.name = "user_led0",
5 z8 e2 h- v7 U1 q- v1 O' Q .default_trigger = "default-on",$ j) a2 y" M5 h8 F% l; @2 b
},
; B3 N( ~' p8 v0 w- \/ t {
! j( J0 C. t# ] .active_low = 0,6 ~0 {- D) \" N# n d4 F% f
.gpio = DA850_USER_LED1,% L+ m# i' _& _$ @# M9 q7 D: n
.name = "user_led1",
0 H7 Q+ U8 H) L, u .default_trigger = "default-on",
# `- \1 K; Y( n* O1 r: { },
( B) t7 Q% f( {, s2 p {
4 {# N! j J- k0 B .active_low = 0,
) i% ^) J! y% h/ h5 p .gpio = DA850_USER_LED2,
8 o& L) N5 f' B7 f4 y8 Q, R& I .name = "user_led2",
* }+ w7 M% A5 S: W0 s, ] .default_trigger = "default-on",9 f( S# Y9 {; n; F4 u& S0 H; N2 t
}," P; g0 D' ^& d) K) i1 v
{& [# K9 g+ N1 f/ o5 f: M
.active_low = 0,
$ s# A1 B6 {: u .gpio = DA850_USER_LED3,
7 g9 q+ q2 M+ A! n- o .name = "user_led3",0 n4 e8 E7 x8 J: a7 r6 B8 z3 S
.default_trigger = "default-on",; q7 V" w2 {" {
},7 M9 V* M& e4 h$ s
};" w* K, Z( `3 O# o! b& W+ {7 \
0 d" d" u) \+ G$ q8 Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 [ ?# j) Q5 O- s
.leds = da850_evm_tl_leds,$ [: U5 v! I2 x9 B- _4 c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- M, w" K. r$ Q
};7 f D; l" s0 g2 ^
% t5 ~- I- N! l# d* }7 _! \* Y8 d. ustatic void led_dev_release(struct device *dev)
, W# `, Z% U" {1 R0 ~: v$ D{) L; i6 }4 \4 V. V5 T- i
};
: I2 U4 J& y" c7 [& S# y5 n% x; x+ x; O+ u) X7 u
static struct platform_device da850_evm_tl_leds_device = {% S) ?, d; \& T! K
.name = "leds-gpio",
5 F5 @" f% @! j& V; C% j .id = 1,' q" A0 O8 b# S" F# G
.dev = {; W) S3 p, N! `1 e+ N/ Q
.platform_data = &da850_evm_tl_leds_pdata,
Y4 ]: E6 j2 ?! F/ t .release = led_dev_release,& D+ J0 A, X2 b
}( y! m' ^8 B! _% J6 Y
};
$ _; z8 a7 n: A) W. U" w J, F0 T) n- ]
static int __init led_platform_init(void)& b' R0 p7 T( g5 O# X
{) `& e( E0 @2 L% `1 a4 E/ _
int ret;( X: E" G9 t" k7 i
#if 0& J% X1 S& E; H* e/ r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 l; Z! k1 w# Q7 B* @
if (ret)
: b& }( Z: P+ b0 _% v; g- j9 ?% K9 g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 \+ f1 _1 {- j "%d\n", ret);# i; Y. ]0 P! w* w& g+ o
#endif) K; f& K( F$ M2 Q+ I
ret = platform_device_register(&da850_evm_tl_leds_device);
+ v, j3 |: ~9 u& t/ y/ h if (ret)
5 [5 A; f! C4 c% J pr_warning("Could not register som GPIO expander LEDS");
6 R! m x8 Z6 R' |0 }; }, Y" y else
; L5 l- ^1 S% u6 M9 ]% N printk(KERN_INFO "LED register sucessful!\n");8 n: N( K9 x4 e6 D0 w; {: c
e2 r7 e0 C& r* `# u2 E% h0 z
return ret;
, `* o! y; S3 y9 |' |6 t E: A2 S) e}9 f" j3 g$ z" s$ @8 u
- |( H! d8 i r( d% H. [
static void __exit led_platform_exit(void)
& t/ d5 |# [0 q4 |% W1 B! t{- e# b- H5 v3 H. p4 d
platform_device_unregister(&da850_evm_tl_leds_device);- m, e) @, |# I
8 r+ X* w0 F+ _ y' U r printk(KERN_INFO "LED unregister!\n");( M" O: v' w }9 C
}
& `+ K3 J( E: f: y3 g+ n) i' m( d7 @6 u" M2 R O
module_init(led_platform_init);
/ G b! \6 }0 g1 R0 D ymodule_exit(led_platform_exit);
, g w$ V: M# o
# a H6 e! W0 A! zMODULE_DESCRIPTION("Led platform driver");2 A' ^& }4 z; n
MODULE_AUTHOR("Tronlong");' g; S. S5 s, {% ~& C- a
MODULE_LICENSE("GPL");
0 x) y! z" Y$ P- X9 Z2 i b, y6 C; X
) K) ]# }" C; P X |
|