|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# F8 ]) y" U8 Q( H# _" s9 R: F5 \( l#include <linux/init.h>* _, ]3 W$ K& E8 [
#include <linux/module.h>
9 R" ^, |" x: }#include <linux/kernel.h>
$ @$ c, s4 E$ t. Z#include <linux/types.h>1 ]$ u4 B/ u9 Y6 `! l4 ]
#include <linux/gpio.h>
. q" p n8 p2 T- _6 h: H#include <linux/leds.h>0 ~* @% ]8 u' h z% @. F8 N0 ^
#include <linux/platform_device.h>
! b. B9 y: j& l( k( E" ?& M% p, q: K. m- i$ P- F
#include <asm/mach-types.h>
! G. B& r. q6 {9 |' k#include <asm/mach/arch.h>( G( X+ J% \& r, q( J' J
#include <mach/da8xx.h>; ]" J8 A& V7 L4 Q% t
#include <mach/mux.h>
" K; {. y/ U% F: H }% ] ?5 k7 h4 I+ J& Q( a w* ?) I
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 t- B* r5 r# q- \#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" b8 y; B' F( T# V1 M9 m#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ Q& e7 W- U0 m3 i; H! h0 g/ ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' @6 H* q9 v. V" F0 V. c
: I& [9 [2 q" m- L
/* assign the tl som board LED-GPIOs*/$ U) S0 F4 r( C, Q, P! X
static const short da850_evm_tl_user_led_pins[] = {& f S) C6 D5 J+ [, O4 q6 |, e
/* These pins are definition at <mach/mux.h> file */
( n( H- _9 v) S% F2 F! R8 k) ~ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ w6 K/ ?3 ^$ V! S' v0 q -1
4 l8 M; g* r2 p& f: v};8 }( \ O2 ? ~# h% ` l( K+ A
. h& [0 y( O7 C9 Mstatic struct gpio_led da850_evm_tl_leds[] = {+ z- v- S+ V3 E4 O- D1 M; l- _$ ]
{) K0 z" ~$ X: |! P
.active_low = 0,- a( Y) ~- o1 B6 ~: s1 q
.gpio = DA850_USER_LED0,
/ _7 A) ]: U* [) F: z( J .name = "user_led0",
% Y- Z) o: w4 U' S+ J' V0 P7 b .default_trigger = "default-on",
' u) F" _- p- T },
* i+ _" E+ l( [ {
9 O9 _: B+ V: k. s .active_low = 0,
3 |# [, h6 |+ ^- W .gpio = DA850_USER_LED1,) E v S2 A9 I7 k. Z
.name = "user_led1",3 ~, L5 V% q+ y* p6 J) Q7 E" W
.default_trigger = "default-on",
. t9 e; _! p8 K5 V& R },
' H8 f$ S6 T, x2 x' k+ d$ x {
% H( c2 g* R9 X2 i( c .active_low = 0,: d* B6 h) l: Z: h) E) l& D2 }
.gpio = DA850_USER_LED2,
1 u8 W8 _$ J+ j- { F .name = "user_led2",
: k! g* \( p7 F# z% s1 L* U u. F .default_trigger = "default-on",% _& L, t9 [3 B( R4 \' N7 Z9 ]
},/ ]( R, }; V1 Z2 [
{" W. { d' M+ S+ M- }/ ]& }! G4 x
.active_low = 0,
! U: {2 }: I) o# @ .gpio = DA850_USER_LED3,
, h- n2 d' Q0 } .name = "user_led3",
. z% L6 X8 o% J: k .default_trigger = "default-on",( n d |- U) U
},; Y9 G* t0 Q8 d( l
};* P; s. a4 }! [3 g% T( Z o
, X* I) _, ~4 m+ h! pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ U0 A4 U9 J; P+ w& R* d" ~ .leds = da850_evm_tl_leds,
) ?, P" y5 J' y2 _ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; _4 ~; g" b Y" H! J
};; S0 _2 Z: a3 B, A9 g3 p% Q4 Y
/ ^, W7 _+ c) N1 z! tstatic void led_dev_release(struct device *dev)
' q' N+ b3 w1 m1 ]$ Y& n{7 C6 M) K( l5 u
};
9 |) }% O8 Y$ F# z( b5 W( g8 b" R& y: `% E
static struct platform_device da850_evm_tl_leds_device = {( p& O0 Q8 u6 x6 x! m
.name = "leds-gpio",
2 m! x; z/ s+ f R .id = 1,1 o$ O7 i u6 Y! ^5 e4 a8 B
.dev = {
' s" ^% l0 a$ h* Y0 l .platform_data = &da850_evm_tl_leds_pdata,
" Y6 F# Y% I8 t, l1 [ .release = led_dev_release,. u5 g% ^* E5 \
}
' @6 L* I% W3 P: a& x};4 l) K; A1 h) \; |
8 I7 H3 Q$ _: J6 |" C) k( T& Cstatic int __init led_platform_init(void)( g- G7 D9 K5 `, ?" g P
{
6 ~* e! o3 G- e O0 \2 D+ S; Z int ret;
: ?# ]- R% U5 J5 c/ y [+ K#if 0# x1 Q) z- ` \9 M: N1 Q( |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 u8 N. Z+ m# A- s
if (ret)- g$ n- C0 ^2 R! ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 L' E$ B( o: U+ [/ ^1 K0 N
"%d\n", ret);$ T" z* |" p6 z% _# a9 [
#endif" ]# `" |0 L: N0 b& ~: h
ret = platform_device_register(&da850_evm_tl_leds_device);* R* L8 L) {, q& j5 B: o
if (ret)
7 @2 k' {% Y O1 t/ G pr_warning("Could not register som GPIO expander LEDS");# [# v! j4 Z0 W7 \. x0 i' y* M3 m
else9 P6 c. G% d! z, z
printk(KERN_INFO "LED register sucessful!\n");
- ?+ w( G$ i" { g
4 q- W: P- g6 B3 F) |9 f return ret;2 d x5 f: t% V7 y' n
}
5 O$ }2 b0 u% E1 j: d/ H% I7 L- ~" H- t( Q: g8 l3 `4 U
static void __exit led_platform_exit(void)* Z3 L! _; W8 g, j
{! d' A# F1 u# l7 W3 w# P6 Q
platform_device_unregister(&da850_evm_tl_leds_device);
- ^3 I! H- t; k5 D) D% i+ U- {) K2 n. U& k2 L$ I& M6 T
printk(KERN_INFO "LED unregister!\n");
# d0 M) @$ h. s% x9 I; j4 K}
) G5 z, L+ x# u& h
! ]9 |( w7 t, o. s. x/ wmodule_init(led_platform_init);
5 I3 x0 k# r7 [" N3 T/ y* J& bmodule_exit(led_platform_exit);/ n/ A8 h8 m `3 N; y
8 u1 q3 i8 v$ i" {0 Z
MODULE_DESCRIPTION("Led platform driver");
0 d" \* } u+ aMODULE_AUTHOR("Tronlong");
* ^1 [- d% x4 b- }; tMODULE_LICENSE("GPL");
, `1 u& B' J# _/ e4 m) l/ w! P6 o+ `5 H4 g) ` B
|
|