|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 @4 j5 T+ z& {/ O$ x9 C#include <linux/init.h>! H0 J k1 |9 o, y
#include <linux/module.h>+ u7 c2 w5 J, \& J
#include <linux/kernel.h>
6 T; Q0 v! C$ O& m) M#include <linux/types.h>3 e4 a) r% o2 v0 ?* X7 c
#include <linux/gpio.h>. d& j6 P5 Z- ^9 \
#include <linux/leds.h>& W1 D K! s! m2 Z% R7 j
#include <linux/platform_device.h>
2 C8 G+ B4 b7 A# B) p( O! m$ f, o* c1 z* t( C5 P- n: `& J
#include <asm/mach-types.h> I% i$ f+ ^ p" B) r1 H: N
#include <asm/mach/arch.h>8 j3 _; G( r! z1 |( d9 ^3 _
#include <mach/da8xx.h>
6 J0 g; j7 A/ b9 t* A#include <mach/mux.h>
1 o6 m+ F8 { F; U! j8 P) u8 [& O1 G2 a/ b1 o# m+ D7 y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 \" o7 U! c" ^& G7 c
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 W& N4 x3 w! E$ c% N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 _/ D4 V6 X% l* w2 |3 A5 }
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: B& e2 y% E' u1 Z5 Z: B+ t, j% p$ a
1 ]9 l+ @* x. T S% g% k8 p/* assign the tl som board LED-GPIOs*/: e- u+ R3 D6 \) X
static const short da850_evm_tl_user_led_pins[] = {
, p: H0 b# E! ]" x% F /* These pins are definition at <mach/mux.h> file */
: h$ k2 e' s* l& p0 B DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( g4 A8 b9 N+ c+ o9 I -1
9 D# U) R4 N- a% J' _};
: C8 x% d, G% w# t9 A( Q4 O9 R- m+ h" E/ b
static struct gpio_led da850_evm_tl_leds[] = {
# |% A: p6 O0 F: q+ `0 w: y {2 p; I) ~& \1 ^8 c3 M* [
.active_low = 0,1 m; l( V9 q. n
.gpio = DA850_USER_LED0,
. F: Z; H5 J8 s" j' l- L+ Y# X .name = "user_led0",
7 z3 k: ^+ V2 t" i4 G .default_trigger = "default-on",
5 E+ D& t( C# w. D: `* o$ d' Z },
; D9 y8 |; G0 s% P {
& Z8 N/ w% Z( u: ] .active_low = 0,
# V% v; T- Z, |# D$ g .gpio = DA850_USER_LED1,5 A* } Y% a1 D8 L& u' U% ?1 O
.name = "user_led1",
7 ?" f0 v" ^0 M( M .default_trigger = "default-on",
! r. o8 K1 M7 L: }; O' ]0 L2 ? },0 Z9 s3 m: m7 G& |- b4 h
{
' W- r* d* H' T( C1 f0 [ .active_low = 0,( Q9 V' N* C- j! `
.gpio = DA850_USER_LED2,7 {% z5 P4 a) c* w
.name = "user_led2",$ c3 d7 y7 z0 p H
.default_trigger = "default-on",1 s9 _# u( j/ w: _1 P$ I
},
N% J/ m/ ]4 C' N; h. E. S/ h {
# c, _, A# S1 L4 S+ G- j$ |9 G7 S .active_low = 0, X) W3 K& `4 f
.gpio = DA850_USER_LED3,
# o8 S( p5 M& B' u! f .name = "user_led3",. G3 A) o. J. n# ?( T/ D# Q
.default_trigger = "default-on",1 ^: t$ e. |, x ]+ f1 r( e! L3 u
},
, |0 [- t- ^& x6 m9 Z9 l};
0 s0 V# m& |' h2 R* H
# J) G: v" t; I3 W2 hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# @1 z! J5 k/ H8 ?" c) A- k
.leds = da850_evm_tl_leds,
7 Y: `& F7 `7 x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 q& V; I! C1 S* q l
};
I" l: \! N6 Y' J9 j( J0 ~' C) M0 W# \; Q) d0 {/ L
static void led_dev_release(struct device *dev)
+ a9 o4 h+ X# ?! ?{
+ X" Q" S/ m/ ]! ?$ K};& l, w# l$ h: m2 D- P; ^( _7 _
7 H6 _# R2 v$ r+ m
static struct platform_device da850_evm_tl_leds_device = {0 ?, i+ U2 Q, `8 w
.name = "leds-gpio",
* p6 ~" [+ T/ W$ J- Z+ B .id = 1,
- R) M& Y" I/ Z .dev = {3 E; I, V, w5 l1 Q$ U4 Q
.platform_data = &da850_evm_tl_leds_pdata,
* x: D+ R. e+ I3 y* {, W .release = led_dev_release,
: n$ ~7 |3 R% v1 @) j }* U: E5 K1 ?) l7 X
};3 ?3 G3 `8 U0 v0 m2 B9 `
! k: t7 B( X) S; }static int __init led_platform_init(void): n6 U6 ^6 O: q' ?! V8 a1 r* [! v3 z* R
{
9 m8 C. |* t3 W8 Q+ U& d int ret;" D0 h D* C8 J9 Y
#if 0
, e, t7 k( l4 w. e ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) n" B& o( M8 T2 `1 `
if (ret)3 Y% W, @( W5 \8 ?* u: H" v0 ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' B" q. c, Z6 q( f- k9 }
"%d\n", ret);' D, o( s5 F( z& Y; J3 u
#endif& A j# t4 l! u- s1 H9 K
ret = platform_device_register(&da850_evm_tl_leds_device);
2 J7 n- b5 Q; O. g( v, A" l; { if (ret)
9 [$ Y3 f* ~2 J O pr_warning("Could not register som GPIO expander LEDS");4 X" e4 Z1 I# W
else: V) l0 G) ]" t
printk(KERN_INFO "LED register sucessful!\n");
8 P7 N d' R0 O8 U2 J* y1 J' d1 b7 M6 {9 |( i; _
return ret;
+ a' s4 h( w/ F, b% B0 @} w6 X1 h2 L6 F: k! e9 p; \ F9 O/ ^: z
7 l3 E! w Z7 _4 Z) Qstatic void __exit led_platform_exit(void)
x8 |2 z2 |# D4 ~& y{% Z7 o/ L! x( P
platform_device_unregister(&da850_evm_tl_leds_device);
% m( ]7 Z* [+ k$ t9 T& g. f! S, Q4 B9 t0 B% u Q
printk(KERN_INFO "LED unregister!\n");
d) e6 U- V+ j E- f}6 c! _( k7 o9 r, ^! |5 N+ A7 o
3 r- P" q8 F) u7 K! bmodule_init(led_platform_init);7 C/ a5 i2 S: O" J8 j- y5 D: l
module_exit(led_platform_exit);
; h* X2 X! E* t( ~5 d# u1 u2 e5 l# Q
; e2 J) T6 w1 x+ l+ j. x: m# SMODULE_DESCRIPTION("Led platform driver");: N9 H6 ?+ d. j/ O! t
MODULE_AUTHOR("Tronlong");
: D4 {( J# m6 Y" F2 N4 {MODULE_LICENSE("GPL");( R" }. I, u5 z* t6 g6 ?
+ ]2 |( j/ N0 T |
|