|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 V5 E) X3 @6 i, f
#include <linux/init.h>9 l9 Q4 ~$ N; L: T- x. J2 u
#include <linux/module.h>" K6 E* p3 c; J; ^4 |; z
#include <linux/kernel.h>
" z8 U8 w9 n% \- r% N! O#include <linux/types.h>+ N6 b. K9 P7 x' B/ N( T
#include <linux/gpio.h>! W2 ^, \: t9 K' J
#include <linux/leds.h>
& J% i9 J* E, e6 q* b; I% Z' F#include <linux/platform_device.h>& C1 y! i' r. p
9 f. o3 v0 ]( Z$ T0 y6 Y6 B#include <asm/mach-types.h>3 n/ o% X8 F) f [5 J6 V4 r
#include <asm/mach/arch.h>
; b/ J8 M) h4 X#include <mach/da8xx.h>
; Y2 f6 X3 T7 T& y#include <mach/mux.h>
1 V* L' O$ y4 ]8 |- ~- l( m+ a2 A* }* g8 a
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), ^8 q2 n6 \5 X" k: s0 L" U
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ k% H6 n6 p9 l" ^8 C( }, c9 t7 F#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- b! S& S$ q" V; e& y- g# g1 C1 V2 e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" m6 O" T4 p9 }1 T/ }) y$ _4 d6 @; I9 Z
/* assign the tl som board LED-GPIOs*/
+ G' n, s' X3 P5 ?7 cstatic const short da850_evm_tl_user_led_pins[] = {
$ l$ ~/ s, E3 T/ r0 g /* These pins are definition at <mach/mux.h> file */) q, C2 k$ I. [* c! W# a( C
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. s. {" N- B4 q- G8 j# U: B n
-1! L: y! Q! L* Y0 U
};
% |' H3 f1 |& u$ p- H$ K! v; g( s* J. R; X) v
static struct gpio_led da850_evm_tl_leds[] = {
3 q4 Z1 i4 m- k4 X {
9 \9 h. _* |' X3 J7 X7 r8 x- B .active_low = 0,
4 i6 n e+ U* g/ u( f3 S .gpio = DA850_USER_LED0,9 U z9 C2 N' Y; F, R
.name = "user_led0",
; {& a7 j8 u, q2 G: g .default_trigger = "default-on",
% l; w+ z$ r% |+ u! e },
$ k H4 V* V7 _+ f! ^. L! q+ D& u {
* ^# o( ?2 R3 e# P& ]( o7 {7 M .active_low = 0,
6 N* i" \& h# Z! x .gpio = DA850_USER_LED1,6 p# ?: @- r1 A( F# |% n: O: ?
.name = "user_led1",
* O+ N7 O6 J. ]3 R6 Y& D O8 u .default_trigger = "default-on",! X! V& i P* v s9 S2 y7 M
},3 [) Z( F+ K& D/ i4 x/ M# J5 |
{
- p0 n; V* ~0 m .active_low = 0,0 C- [. C# l( v7 w6 d0 u: H4 U
.gpio = DA850_USER_LED2,4 V) ?8 w2 c! f. G) f" r, E' S2 A
.name = "user_led2",5 [6 i8 B0 u5 A. H+ j% p
.default_trigger = "default-on",
! H3 c/ w! u" _# E }, A) T* U7 }# E4 p( J, L& ?4 T
{% y* ]- t4 i+ X2 N9 e# e& {
.active_low = 0," S' M! j5 K( N& q1 o
.gpio = DA850_USER_LED3,
! O2 [2 ~& E6 \$ d9 T3 I( P .name = "user_led3",+ ~. e. C1 r' v6 ?; H7 V$ I3 p
.default_trigger = "default-on",( m( J% K" ?. f* P
},8 X* r1 _9 Y" O* g+ r) f# @" _
};
* }1 t% `5 T* t& X8 Z% r
" R2 o' R* d5 x3 _# j3 x, \static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: y# @" u& Z8 P. j .leds = da850_evm_tl_leds,
- S2 ~' Z' S0 o1 t# w( P- b! O .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 j0 y* Y4 k5 `};
% F; o' [0 U* _: Z) ]2 n
3 @/ a- o2 E+ O: dstatic void led_dev_release(struct device *dev), T) h- [( j+ Q1 v* Q- u# D
{4 v% T2 r; i$ \! F' ^: l
};( B3 X+ g5 ~1 u# w2 R: Y$ O+ s# Z
( o5 ^6 |1 \8 A9 m3 P( D5 ~/ C
static struct platform_device da850_evm_tl_leds_device = {* O% R: S' ?: A1 J& U
.name = "leds-gpio",
4 Q. _, [9 M$ F0 Y- y2 _ .id = 1,
1 [+ X5 y0 {2 A- n .dev = {& w( X, O6 r& n$ r7 \
.platform_data = &da850_evm_tl_leds_pdata,' s$ Y3 i7 G; O' W& g8 q
.release = led_dev_release,# _' G% K ]7 l, L7 R3 _
}
! Z6 m3 `; L& @! `& s+ T4 l};. @. ]& }0 D. x
& H1 w) r ^5 I% [0 `
static int __init led_platform_init(void)! d6 r. E6 p4 X2 B
{8 M* r+ r5 [9 g
int ret;
8 D5 }4 U( d1 g! g9 w#if 0
- j: }. G7 I2 b1 Y- l: W ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 p* Z5 A2 X& n$ K6 L5 ^9 k
if (ret)
* z) q) H4 O$ Z4 L! ^ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 _" r: D; x4 K, }3 r; {- ~! I
"%d\n", ret);- M$ ?9 p# Q5 c% z
#endif
$ H; R( B+ [ B ret = platform_device_register(&da850_evm_tl_leds_device);% O# p2 i1 @+ I* } s
if (ret)$ U2 m6 ^$ {: p! _0 F$ N) ?2 r
pr_warning("Could not register som GPIO expander LEDS");
( j; U) V7 O- O* o6 E! S( ]$ s else
# U! R# G' q5 }9 L5 o printk(KERN_INFO "LED register sucessful!\n");* M/ }# |$ Z( S
3 D7 O5 o. [. b return ret;
+ Y2 U* C: W8 S0 @3 m}
; [3 w2 S) B* ?
3 a/ s c. A8 q0 o/ nstatic void __exit led_platform_exit(void)0 H- B- @% S/ s& n m- E* }1 q2 [
{
5 \0 i" v/ G$ i9 ^, p8 z platform_device_unregister(&da850_evm_tl_leds_device);9 d! P, v$ B S% [# W, Q. u
3 T# A0 Z+ [% t4 @. n+ i printk(KERN_INFO "LED unregister!\n");4 ?$ E# b W, R2 F* N2 F
}; _) M. Y( S' I8 q
6 Z$ p! @3 b% l" F3 H. qmodule_init(led_platform_init);
+ U! @# I0 c4 j7 O- L1 p+ z) s7 zmodule_exit(led_platform_exit);4 m+ W( F: r2 N' B
0 @; h4 G2 q& _5 A2 xMODULE_DESCRIPTION("Led platform driver");& B" ]9 T, g% P& E" f
MODULE_AUTHOR("Tronlong");3 x8 i/ z5 ?( G) V- A2 M; W
MODULE_LICENSE("GPL");
; X6 |/ J! m8 F0 i% e# \/ x
/ d5 t. K+ {6 X5 n0 P& I0 I& c |
|