|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# |% E+ R' Q" z+ a
#include <linux/init.h># y Q7 h6 [# Z M0 F9 [1 g) F. @
#include <linux/module.h>' g( ^1 e/ z7 y$ {0 _& M& |
#include <linux/kernel.h>
# p: y$ i+ ~3 z/ P#include <linux/types.h>
" A3 A( E' N1 }) D9 L) C0 C, @#include <linux/gpio.h>
% C; Y$ Z# F! y) l0 J#include <linux/leds.h>
* Y4 Q- ~' n- k B. T( x9 L#include <linux/platform_device.h>$ s8 ]1 y, [8 r M; v
9 o0 I, V; R6 W: [, m#include <asm/mach-types.h>. H$ Z/ x) |; ^0 [4 Y' {% E; z; q: `- E
#include <asm/mach/arch.h>3 H+ P E6 o4 i6 `8 J
#include <mach/da8xx.h> W# Q( {) Q8 K: Q# C! @
#include <mach/mux.h>
! G R0 s$ Q% o, e+ [
$ a7 o9 W5 D/ w0 H% o) n$ K9 f; E#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 K2 S6 r) M1 H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 h5 n) n0 b1 V; h4 F( m4 [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% O- H% ?, v m#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 C4 s/ x: H) _
$ _( V |+ j/ k# }7 R2 y/* assign the tl som board LED-GPIOs*/% T8 n, c y# x
static const short da850_evm_tl_user_led_pins[] = {
, Q+ x' C* ^0 F, G' ]( m4 Y /* These pins are definition at <mach/mux.h> file */; L. @& r1 W" B# I6 X; r8 Q( X
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 C) V- _3 x8 a. |3 O d+ N# @ -1, {6 M% V8 Z' x: M: t! l
};
5 {6 ?9 ^2 y5 s1 ~0 x$ \ u
( v1 H0 e6 }% c+ ^static struct gpio_led da850_evm_tl_leds[] = {2 X. D9 T- P- T+ p. v3 `, Q& d
{
3 l- ~: [, I( Q .active_low = 0,
: m$ U! Y% X" \3 S3 G+ H0 S; X .gpio = DA850_USER_LED0,
% G3 v: |7 L9 T3 ?1 p( j0 X .name = "user_led0",
: n( e7 j* Q: ~' h. {& D$ { .default_trigger = "default-on",
: u. }1 W* G0 C1 ~: c# \" ]# l }, s$ ^4 h) D. F8 {4 r
{* s( H7 [' J9 {6 u! o M
.active_low = 0,
F: n- B6 C1 s* i2 l% o2 f4 m .gpio = DA850_USER_LED1,/ t% T- w- N9 M
.name = "user_led1",
# l5 O: p" c/ T1 z+ }) R .default_trigger = "default-on",8 L. c( M) M; ?7 F' d( _
},
9 s2 }: L& {( E {) Z$ Z' S3 o; c
.active_low = 0,
7 Q, ^6 Z, a/ A, u1 X9 H: K1 W .gpio = DA850_USER_LED2,% J6 K/ I' z6 I$ w) s* w1 b
.name = "user_led2",; C1 `. A6 F) H
.default_trigger = "default-on",
/ p. z+ P, f0 O+ k9 I1 e( ^ ^ },! q) ]4 z- Z+ r
{
' z/ A7 `0 w8 K) \! |# h8 }: q .active_low = 0,
5 f: x* C( M9 B& F8 N, O0 D" B( V .gpio = DA850_USER_LED3,7 `" P* \1 V8 e5 E! f& z/ [6 `3 J
.name = "user_led3",
$ _0 \& j9 Q8 z( W .default_trigger = "default-on",. I/ f" O! K' m9 y, |6 z1 Z) O
},
3 u. B% q+ X+ F: l: ?3 ~: \2 u# j};
! i V$ c" e7 r& ^
3 {8 ?6 f) n/ O) t: f/ n9 Z# lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ W' D( d9 b$ J
.leds = da850_evm_tl_leds,
8 Y6 Y* b8 W: s .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, D: f6 a$ L$ z( R};* M. t) y/ ]2 T+ p; k D1 p
& N0 v* m6 E4 M& d
static void led_dev_release(struct device *dev)
9 N+ M2 j- V7 O- ?, I{
8 { F$ q5 L! `2 U+ d1 J};
2 [! s/ s# N+ u: u# `
) f7 X& t3 Z& Mstatic struct platform_device da850_evm_tl_leds_device = {! e* G/ u3 F3 L4 y5 _# F( {1 V L
.name = "leds-gpio",7 L; D* C& H& O1 c9 V
.id = 1,
1 ~" q/ E P- N .dev = {4 ?* o% `! e& e+ q! ?: v
.platform_data = &da850_evm_tl_leds_pdata,
* n! N/ i; z+ H0 s7 G0 A6 G$ m .release = led_dev_release,
: m! L* J9 t7 } }
/ ~- V* _+ m( o6 ]1 I};5 \. ^- [$ n ~% N+ _5 r
$ o' o7 @$ a! b% O2 |) Jstatic int __init led_platform_init(void)3 J2 O( i, Q5 Y6 c; J6 \ `
{+ J; k) Z f# \# \
int ret;
@1 e; G; M5 |: l K" a#if 0* s3 D6 t3 e( q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) z- ~4 K) N3 C' \2 v if (ret)
7 N0 }2 n( ~" G pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' E) t- u" M `! `, X4 B "%d\n", ret);
4 O( x2 e! h2 `#endif+ a2 l) v; D0 C2 L' _; k# @# Y1 w
ret = platform_device_register(&da850_evm_tl_leds_device);, S' q( L N/ Y V, n a
if (ret)8 s5 c& x- r! m# P
pr_warning("Could not register som GPIO expander LEDS");
" f( @" i1 U5 F else8 V* x5 v( @4 p. m4 H% t+ p
printk(KERN_INFO "LED register sucessful!\n");
. U3 E) L c) B4 C
@# [, Z( m1 t) }- Q return ret;2 o, i. @4 i. G% l: Q
}
9 d: S; V, c7 a6 l5 a' D0 y. J: ?- F& }' w7 y. \
static void __exit led_platform_exit(void), m3 H# ]& W" o
{
& j( R2 q" Z4 n platform_device_unregister(&da850_evm_tl_leds_device);* S! R% i+ r- O- w0 e; v
/ E; R$ Q g2 `( [
printk(KERN_INFO "LED unregister!\n");
. I4 ?$ B4 t+ X- O}/ f* K" Q8 J- o/ Z3 @
. i- S& _4 i( k+ c; ^7 k% Imodule_init(led_platform_init);
' l6 P5 j7 ^4 m; n/ M* B$ }3 lmodule_exit(led_platform_exit);" g, Y# h, g+ L5 u; ], m$ y6 c
- c2 T ]. H8 G8 M( NMODULE_DESCRIPTION("Led platform driver");
' z/ H5 B# d, k5 b) sMODULE_AUTHOR("Tronlong");% c3 I7 Z5 a& P' l: B+ r. ^
MODULE_LICENSE("GPL");
! z, H7 p/ t4 E0 R" v7 V+ a
! q3 h$ a% c" w3 ~6 H |
|