|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, [3 _3 w1 \" `: ~#include <linux/init.h>. j& Z2 h& M1 k! ~4 s
#include <linux/module.h>' J8 _: o- ^6 [# w W7 p& r' e
#include <linux/kernel.h>
1 `* B/ L" O4 _#include <linux/types.h>: w: Z) p! p% \9 I
#include <linux/gpio.h>
: i9 `& I% Z( _+ C6 p5 w: ]#include <linux/leds.h>
) ]2 T4 K' n4 u7 r4 m4 X#include <linux/platform_device.h>- l; i- h. |" [
* Y; J' h5 \& Q7 v: k2 b
#include <asm/mach-types.h>& h w1 f I1 A( @5 u
#include <asm/mach/arch.h>
, [; g, i* f0 j" W2 ^#include <mach/da8xx.h>6 O1 v4 N6 S9 p( N. e, I9 q
#include <mach/mux.h>% j0 K9 q! U j3 o' F
8 _# W. `) _. H) D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' |$ ]2 D. f. ?! J, }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# |0 R8 }" D% Q1 \) }& {0 _3 G2 o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 T8 w6 r" ~8 a2 C' @# G C) ]! F+ J) h#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" [) ]+ g0 E- o4 e6 m# l) Z& a' e' [# [# y2 \: q
/* assign the tl som board LED-GPIOs*/: e; C3 @/ R M, d
static const short da850_evm_tl_user_led_pins[] = {0 u) z+ j, d+ c5 H7 I8 j
/* These pins are definition at <mach/mux.h> file */
7 u( {( }7 Q& l7 P4 X T A5 m DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! c, _7 p, k, ^! r) v9 s+ h3 j -1! u1 v7 {* d+ F; _. Y
}; D8 v( h' ^/ O" v" F. s
& I1 G2 O3 O" |6 D2 _4 G! P
static struct gpio_led da850_evm_tl_leds[] = {
4 ?7 \) [* Z/ f1 t! I' Y# {! g) w! g {8 r6 I" M! M* v! r3 E
.active_low = 0,, _) I/ h7 \1 M. X) o
.gpio = DA850_USER_LED0,' P& Z; L! y' m0 V, V
.name = "user_led0",
6 R6 m1 N9 X' Y4 i8 w .default_trigger = "default-on",
0 h4 w8 ?' l; m8 w) x, s k },& }- E _7 x6 U/ K) v" v0 R
{
* @" q) n! K1 C7 q* m .active_low = 0,% k- B( B$ h$ q; I5 w; r8 s+ N
.gpio = DA850_USER_LED1,
8 H% o) w8 _) r, U+ W .name = "user_led1",9 E. X* @" R9 ^: i5 }' f* S; l4 G$ g+ r5 D
.default_trigger = "default-on",+ q. E$ }& J# K; v: m6 [% g2 [
}, {8 M: ~' Y: ?+ [) w
{
) q. a$ j$ U' @2 u7 Q$ @7 @5 R7 c .active_low = 0,
5 }" P- @3 N) ^6 {( | .gpio = DA850_USER_LED2,
$ Z% Q) d8 F2 c: t# G- Z( \8 Y; o .name = "user_led2",
/ ^, x( b q( l, b6 k; S) k .default_trigger = "default-on",
: k" U/ z' {$ Y9 | },0 p1 l h& v7 o' P5 F
{
8 u! _, [2 {, ` s$ Y! t .active_low = 0,
* p. L: R0 `& A .gpio = DA850_USER_LED3,
3 a7 S h# R. ^: o4 r9 r .name = "user_led3",
7 t* x! Y: P; p; U# M' [) |" h# C .default_trigger = "default-on",- F! R5 Q- V5 D h+ f7 T6 h8 \
},3 a) U* i2 q: ?, G
};' }9 w j2 D8 }! J' O& x' l+ `
2 b" D. D7 O4 hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 D: D) n( R; u) t2 d% S .leds = da850_evm_tl_leds,
' d" U! ?5 x+ w5 f8 Z$ O .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 p6 t0 q/ L- V) r- H
};# W; I! N" c, R2 a: ]
& D0 [7 C+ U( [0 z! H1 Rstatic void led_dev_release(struct device *dev)% |6 N. V3 g2 o3 `7 U$ C+ Z2 _
{
* g- h. b' r1 Q. o% p+ ]};
5 s3 g- b0 u1 b9 G' {1 H( ^4 ?# w, U3 C4 K! l* {# x! s* N
static struct platform_device da850_evm_tl_leds_device = {' N6 ~; I o, y
.name = "leds-gpio",' X/ c0 f3 f( [: i
.id = 1,! L" c K* L2 n8 E {
.dev = {
/ Y! \0 u; n3 P* H( } D0 M .platform_data = &da850_evm_tl_leds_pdata,
% @. h2 c( K8 J, p .release = led_dev_release,: e U9 s" g, U, J" p
}/ o7 ^/ E/ {8 v! B; D
};2 j+ @# T& \ W3 B8 o
. z" O' C+ }6 V# L7 _
static int __init led_platform_init(void)" k# K+ s5 K; T2 b6 i! a9 U
{0 T$ P1 ~/ L8 ^$ Z; `/ ^
int ret;
) O- P& f% F+ K& g" U#if 0/ X' H ?% p V8 ]% }' P
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% g) Z# Q. S' |% `8 _3 r" I if (ret)
& t& l7 o" w0 y" N8 J7 J pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ o p; p0 p/ @! z/ W0 M "%d\n", ret);* `: X; d4 e, M8 S
#endif
4 N( f% C8 l- M% S2 l ret = platform_device_register(&da850_evm_tl_leds_device);; q) z3 [$ w4 z0 ^9 h' @+ Y; d
if (ret)6 ~ |8 Q' Q; F4 ?0 {
pr_warning("Could not register som GPIO expander LEDS");6 S- W5 Q4 Q# m
else9 G9 |3 N, f7 v0 k: T
printk(KERN_INFO "LED register sucessful!\n");; @3 C. e8 x0 d j3 {! T
* V( P5 S0 O- R5 X: l1 T" b return ret;
/ F, Q% N7 ^! d0 L$ g}2 A5 b Q$ e6 Z+ S) m! e
/ y: E9 {4 \4 r
static void __exit led_platform_exit(void)& W: M7 \7 ` h: v- [7 e3 c1 Q3 Q
{
/ t* d1 P; z+ M4 h platform_device_unregister(&da850_evm_tl_leds_device);5 R, q& n" Q9 J! g1 n! R
) h- k5 Q) A- V2 j( x) } printk(KERN_INFO "LED unregister!\n");
; r9 @4 Y9 c# H1 _8 B! _+ l# E}5 m- k& T m* F4 N3 V" d Z7 D
) t0 ]6 h( N. x; @2 p7 tmodule_init(led_platform_init);
' W3 V9 K# E$ L4 _" `3 A8 p+ H( r% Ymodule_exit(led_platform_exit);
& s% C; w) I$ t/ Y# P, F2 V9 l/ ^0 y5 R8 i
MODULE_DESCRIPTION("Led platform driver");# r+ G" F+ X# Y. E& D, R& T' d
MODULE_AUTHOR("Tronlong");! y0 m8 L& d2 {" M) N, K
MODULE_LICENSE("GPL");
$ v4 {- b7 O0 N* l2 f) t8 a6 l* N% L
|
|