|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 [2 \+ z# v+ I8 g" b a' H# f#include <linux/init.h>
* @2 Q5 g1 V* m; @& O( ]7 R#include <linux/module.h>; j0 c+ q# f$ h! y: D
#include <linux/kernel.h>
. |9 \& |" R4 B2 x& K8 F: j#include <linux/types.h>" x% G1 ^% E; N
#include <linux/gpio.h>
6 ] m# D4 P, Q" I. g5 X, q#include <linux/leds.h>! R: E1 Z u, X, [, b1 s
#include <linux/platform_device.h>; Z( q8 l8 m ~& w
8 A/ y$ i U: X* i# ^7 L" J#include <asm/mach-types.h>
, a7 e& M, J' W9 V. e9 U#include <asm/mach/arch.h>1 f; w* L/ [1 Y7 h4 z8 W) h! O
#include <mach/da8xx.h>" U5 W& {$ b) V6 H* N- s$ p0 S
#include <mach/mux.h>
' o7 \: o1 \- J O. o# r) x3 s) G9 ]7 D( j* L
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) W* r$ g5 p9 ?( G1 S; J: h+ ?- w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) i e4 {* q" A6 D! u
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 s- f% g5 ~& t0 h2 t#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" i! n1 \/ D' a! |( J9 A
# @: h6 t( `+ X# q6 c/ d1 h/* assign the tl som board LED-GPIOs*/
7 H. H% h6 r. _4 y; E' Z- `* Ustatic const short da850_evm_tl_user_led_pins[] = {* T4 t: I; f& L
/* These pins are definition at <mach/mux.h> file */: L$ \5 i9 U' O& V+ o
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 A' H" x' s/ s; B" m2 Z
-1- ?9 S' b# g- M# L
};
- u- [3 I' A: f2 u- p4 o6 r4 `2 _" @# r3 o1 J4 N% m
static struct gpio_led da850_evm_tl_leds[] = {
3 S- K7 Y: ~0 f7 p& f" I' {4 b, k {4 e5 g1 }. C& V" q2 y/ G' K
.active_low = 0," E. O# f. Q" g
.gpio = DA850_USER_LED0,/ U+ k% Q8 e% o1 Z. H7 P- j; f+ ?
.name = "user_led0",$ c/ I: I$ I k. e2 r. s
.default_trigger = "default-on",
V! p/ ~* u$ T8 R) l },& Z( L w I$ O- V) i+ C+ U
{
5 I+ u& v. k2 @ T$ ?5 H _1 E .active_low = 0,% \% \8 v* ?- @8 l" [+ v
.gpio = DA850_USER_LED1,
7 D2 q1 f+ U9 G; J% c .name = "user_led1",
$ F, V' S; F9 v% E# T# Q .default_trigger = "default-on",
$ v* h& c; m9 M# {1 g1 ? },
% g1 _, I3 R& h. E {
) w2 w8 _4 T( }- X' ]3 Q .active_low = 0,1 `! u$ g5 M% u, x7 x
.gpio = DA850_USER_LED2," z+ O/ H- \# O2 L
.name = "user_led2", K- i' }/ W, j
.default_trigger = "default-on",0 \- f' x' o2 I9 U3 W9 m8 D
},$ H) c8 s, Y3 R, O" F) x
{
" z" ~& ~7 v0 M) n1 ~0 f3 }5 t .active_low = 0,* B( F+ l) w) x$ l( Q0 h
.gpio = DA850_USER_LED3,7 L( r6 \0 T C" R" ^; W
.name = "user_led3",
, J) V2 t. ?9 G3 A .default_trigger = "default-on"," h$ [) f7 U& l$ y0 B4 K% }
},# ^7 e9 X9 }# n2 @. N
};
A1 e) J; a! Y8 b0 a+ M1 V% }
# _* H2 n N' b" I( T g! ~* H; {; H7 jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' q8 W! D+ m5 t. @
.leds = da850_evm_tl_leds,
, g/ X7 Y0 X7 S7 E( e .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. a+ j/ M1 A4 Y2 }8 x2 x- A};7 }3 G5 O& e9 ` i- X) \+ H/ ?
0 D0 Q1 _2 N' n: H/ p* D+ Vstatic void led_dev_release(struct device *dev)9 ~6 o f) H' I; I/ J; M% q
{
! G2 x* Y1 y+ j};
# j* i/ Q4 I. Y4 z- [
5 I, M" T8 H! @! @; V4 ]% R- @9 B2 Sstatic struct platform_device da850_evm_tl_leds_device = {
1 f, Q# K4 g2 l8 E& N9 L: I; V" p$ W .name = "leds-gpio",
H) V. t; @ C6 c .id = 1,3 y" d \8 I$ ]- [7 z4 F5 `2 r) [
.dev = {! z* N' [! r- i0 A
.platform_data = &da850_evm_tl_leds_pdata,) W& j! s2 y& N% t3 d3 M+ d9 Q
.release = led_dev_release,
2 Z1 r5 a/ x+ g' z }# P. u; j( f/ i3 e: Z, z/ `4 O
};. N& V% s' R9 R
, l- A# B+ Z! E [static int __init led_platform_init(void)( U+ o; A0 i3 u3 v5 g9 {- i
{+ V" b Q1 i" l3 A1 @
int ret;8 Q/ k+ E5 N M' R) y! q$ U3 E
#if 0
$ m0 p3 {) ~ T0 N1 J ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" z& e+ ~' b$ W8 f2 e
if (ret)0 i# \7 Q+ v- G! |' M# L: D
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 h% I- i0 C7 r/ i: C0 T, @
"%d\n", ret);
% V( F6 m$ I7 B, {#endif5 y. J( R4 r- {4 N: ?
ret = platform_device_register(&da850_evm_tl_leds_device);
3 S. Z. w5 Y: g if (ret)
1 @, F. p8 s q; y( z pr_warning("Could not register som GPIO expander LEDS");
4 j! L; |1 M/ ?& o" d& ], c# m else
1 b4 M2 W' l' H, K9 Z printk(KERN_INFO "LED register sucessful!\n");
4 V, [) U: S6 F. p2 {0 v
6 ?( O" R0 H; ?7 e: d& o! }& Z) _# v return ret;7 g5 [; \7 p% N
}/ i1 }5 |/ k' f; `. X/ C+ ~# b. z
0 s% W6 I2 M7 H! O$ B
static void __exit led_platform_exit(void)9 n1 Y. V+ o. R! Y
{) V; z1 x# T* F0 R! U8 Z1 a1 q" f
platform_device_unregister(&da850_evm_tl_leds_device);
f9 C) z; M/ u7 Q) E+ \6 W k* ^8 {
printk(KERN_INFO "LED unregister!\n");* T/ D: Y; j" A- {# W9 l& v
}, r$ U8 Z$ a% ~# ?
* Q0 O# O7 Q5 q
module_init(led_platform_init);3 u2 d; e& C2 I# J3 |, z F
module_exit(led_platform_exit);! t' _# W7 @' Y* h9 G
# O z3 m) T9 G: g& ?. P" vMODULE_DESCRIPTION("Led platform driver");/ K0 c2 A, V! r
MODULE_AUTHOR("Tronlong");' T- {2 H! B' {9 `' a+ I2 J+ N
MODULE_LICENSE("GPL");; `6 I( j/ t3 P2 }* G; y
. r% d6 B0 S& i+ K9 V1 Y |
|