|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& M- c& T0 f/ T! |/ A#include <linux/init.h>% z5 R# s u) d7 {- {
#include <linux/module.h>3 L' A( f4 Q* f6 Z3 h! ]) d8 d
#include <linux/kernel.h>
) L& e `. o5 y. G- w#include <linux/types.h>
4 c% O; y$ P: |2 Q6 L; K#include <linux/gpio.h>
$ g3 j* K ^3 L) l M. N#include <linux/leds.h>
: c. x% _* x. t1 j* e' v#include <linux/platform_device.h>
0 n' `' _4 m/ Q/ k2 F6 g+ ~: d3 X# f) Q8 i2 C* ^5 t
#include <asm/mach-types.h>
: W; `* N# e7 |#include <asm/mach/arch.h>9 T$ A: o8 [3 Q- ?( d" k
#include <mach/da8xx.h>
7 |( i' T0 s4 D#include <mach/mux.h>
9 Z0 a6 F' ?9 a! `) W- K" f% \- B# j/ m5 B, ^+ k- p
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ i8 K W$ q( H/ S# T* Q# t
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 n1 G. b0 v1 F K1 S/ l
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 Z. s" F$ p: M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ i4 V1 q9 H- p2 E" n7 w
; G- u. a# Q% c' @! M$ T/* assign the tl som board LED-GPIOs*/
* ] ?& K, J& H- f+ Qstatic const short da850_evm_tl_user_led_pins[] = {
8 ? h t! i4 F- z /* These pins are definition at <mach/mux.h> file */; S; Z4 p1 F" }9 K( c, v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," X F5 |3 k. u
-1
, D* J1 \2 W% V4 I- Y7 c& e};
2 ^/ h& Q4 [7 e3 }1 |
) r2 D$ K3 K0 F+ y! M2 K- Hstatic struct gpio_led da850_evm_tl_leds[] = {
3 Y, V# m! }) a } {0 B6 T; H' n$ N
.active_low = 0,8 @: g# |' P4 ]& r1 f) J% m: f
.gpio = DA850_USER_LED0,2 a9 m$ n' _8 I# @; u
.name = "user_led0",8 e2 l( j' e7 D& j
.default_trigger = "default-on",7 n8 I; M' N Y
},7 w! `0 p( P" ~( _* r6 ^: |) Q
{
4 T( ~/ A/ [* x+ M .active_low = 0,
) \# Q! [9 S. t$ E: ^# L .gpio = DA850_USER_LED1,5 Q1 {( S9 H5 u
.name = "user_led1",
: F1 m7 o+ K4 f9 [2 y .default_trigger = "default-on",
3 G& A6 z) D# w% u* [0 o7 B3 g },
5 U; j& L5 U8 U# Y {9 e9 G2 M! R- X6 j
.active_low = 0,
) Y8 u6 Y5 T8 H- N: g- \1 { .gpio = DA850_USER_LED2,' A* B& B+ a6 f( {2 h0 r
.name = "user_led2",, I; ?% r& C& G
.default_trigger = "default-on",! ]$ Y1 E$ s& @: l- d- A* C& c
},
, t, W# a) S( P& A {: w* z; x8 B" [! a( o. U+ |* @" n
.active_low = 0,
# f6 G& w+ h6 Z ~7 [7 \ .gpio = DA850_USER_LED3,
/ H8 z$ b- v" \! C .name = "user_led3",
! f7 a4 c" H: |: } H .default_trigger = "default-on",
, A% Y- Q1 i5 w; G6 N# ? },- k& X: F0 j. d- ~" D* y
};# O" f) J L0 I( A0 X H
# \! E- L/ ]. G0 j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ _. x. T1 K( W .leds = da850_evm_tl_leds,6 I2 ]" Y1 ]6 q+ R# _" Q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 {# S8 N& a+ Q- ?& A( w
};
& y m- i; p: \
: p+ ~1 K8 ]# p# z1 e$ ostatic void led_dev_release(struct device *dev), t5 W( M; O( D" u& j. a
{
8 h. K8 I4 S6 _+ i1 i};) F- K4 i/ `' k+ y
* {6 L% I( K' D% v9 L
static struct platform_device da850_evm_tl_leds_device = {
6 h/ Q, M1 |- L2 x7 S9 H0 C/ ` .name = "leds-gpio",! l$ ~* R) z" o5 d
.id = 1,
+ i& E x) k3 d0 ]; y9 _7 N .dev = {+ u! }1 _" b6 M3 R7 v" l- \
.platform_data = &da850_evm_tl_leds_pdata,- v3 c; g7 U& }3 E8 ?/ h
.release = led_dev_release,5 k/ u7 [/ b0 ?: s. S
}" m* J) i5 D5 J# A7 u
};
. h% i3 R W/ f
8 X% k- P! n$ M `6 q$ ]static int __init led_platform_init(void)6 c5 X: a+ {0 d8 m1 w* z. {
{. r( n% B" L2 K7 L0 I# r
int ret;
+ h" @% J+ a F& `6 i#if 02 a3 x: w6 M6 I- X& n: L7 U4 V
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" M/ U* ^/ Y- C
if (ret)
" E: D( P3 Z2 C! X8 a/ ? T( \8 R+ K1 M' ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 K+ I6 }; k0 R* x
"%d\n", ret);
. d8 g8 H/ v: [# `5 x7 o9 i2 |7 m+ s#endif1 @4 r1 W0 q4 V3 \- r
ret = platform_device_register(&da850_evm_tl_leds_device);$ p9 ~( ~ q$ w; v1 X" H
if (ret)
, \& C- l# \9 d pr_warning("Could not register som GPIO expander LEDS");
" ~; n- |# Q9 [3 N8 p/ A6 H else% o [8 T: }6 A) g" T9 y) G
printk(KERN_INFO "LED register sucessful!\n");9 b* e+ J6 S' y
0 o; Q+ e. N- I [& T, ~, d
return ret;% \' p j8 L- R: t
}! ~! ]8 V; G8 a* c
3 L% D& y0 ~9 vstatic void __exit led_platform_exit(void)
2 W* ^( j% J% D6 `4 O{
/ m2 r; P( r8 E3 ? b, V& l$ e! u platform_device_unregister(&da850_evm_tl_leds_device);) N6 E e$ e3 f9 x# ^0 ?) d3 i+ l3 s
; ~9 U( i) S2 O0 [ printk(KERN_INFO "LED unregister!\n");
" A) u0 R0 `; a; p( I}
8 S$ C( Y8 K2 H) w& C0 X
" ^% A- H0 [, H) a9 D. k9 v3 t7 cmodule_init(led_platform_init);- f2 n/ c. O6 n& V, R' F7 k
module_exit(led_platform_exit);" R- R$ u, m) X' c+ Y. L# t
f+ o8 r0 Y( bMODULE_DESCRIPTION("Led platform driver");
# }/ E+ e4 n/ Y0 c9 ZMODULE_AUTHOR("Tronlong");
4 K9 P& Q! e! U& j' n( x8 G& iMODULE_LICENSE("GPL");5 p8 c: M0 y9 r; q+ v3 w |6 {
% R# q% Z* @3 o9 @
|
|