|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" v9 ~. G* X: e! C
#include <linux/init.h>
4 `( D; U- E, r0 b#include <linux/module.h> A/ ^9 h1 O: I& H7 k: D
#include <linux/kernel.h>" `5 f1 |* L5 g2 D9 \" R
#include <linux/types.h>
+ B% i H8 ?1 u' n4 V" Q' n1 X* @#include <linux/gpio.h>
; }2 j5 {1 z" ^# [/ S7 {#include <linux/leds.h>
+ I6 e; i1 N, M$ B9 L#include <linux/platform_device.h>
5 B& ?* l" I% M- B3 v; d3 T2 {/ _! p$ @$ {- |
#include <asm/mach-types.h>
& I5 L5 A/ Q6 F) |* ~1 D3 k# w+ p- J; ?2 L#include <asm/mach/arch.h>
+ U" e8 e2 R5 C2 b' O#include <mach/da8xx.h>) M3 F7 j# {$ ~4 Y
#include <mach/mux.h>) G/ h8 r/ C/ f1 X
4 Q& p8 ?) L* Y' v
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& [% E. s3 ?' `. W; C( M
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) h0 f6 b' ?, k5 U) \& V( |( z4 U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ y/ Y0 ~9 K' e7 M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 H2 _) n" f2 ~: ~
, `, U4 Y2 ?9 Q, i0 W
/* assign the tl som board LED-GPIOs*/) K. c: |- B6 m/ g' x4 R7 `
static const short da850_evm_tl_user_led_pins[] = {
# m- V* o) @/ E6 T; S- d- {7 P /* These pins are definition at <mach/mux.h> file */6 n* C# @5 a7 Z& \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' I/ s- J$ M4 S- l' N2 E' C8 o
-1/ G% Z- {( s2 @: s
};
+ e! l9 i9 ~% ~
( Y# }0 ]! c' q; x I, ^static struct gpio_led da850_evm_tl_leds[] = {
1 W( a. V7 ~# f. \. S/ P {1 C. m7 V4 X" e) O1 e2 X9 I
.active_low = 0,2 I1 B& @: B; _
.gpio = DA850_USER_LED0,
$ s3 T3 B% H+ z, W$ n% q3 a .name = "user_led0",9 n" C$ `3 c# A, z' H; p
.default_trigger = "default-on",* t5 A# g' _/ K' [, Y& e! P& K
},
7 P7 Z7 p- a1 c( h {! `) U- y9 Z5 i" R
.active_low = 0,
' D6 h! |4 a9 z- e; E4 b7 j+ F .gpio = DA850_USER_LED1,/ q. x/ c# P# t- K8 {
.name = "user_led1",& f* z, b3 I( F% i C1 ~
.default_trigger = "default-on",
' d0 J. P/ y7 v1 Q0 R9 y" H8 J },2 ]5 x: Y/ w" _8 S+ s" F5 z
{
& O- V% S" x: w- I .active_low = 0,
9 a3 r1 Q: J' k& k, a .gpio = DA850_USER_LED2,
* R7 v) @2 Q P8 v% R .name = "user_led2", @ m! i" Z1 Y6 U, t/ Q
.default_trigger = "default-on",! t* {9 i$ |% `" U& T2 @! G7 b) R
},
Z9 _7 Y6 z4 a! c0 b' H9 i {. m# d2 R2 y7 x6 t0 L2 M; Q
.active_low = 0, D: m% O1 |& T. w( y, } f, V
.gpio = DA850_USER_LED3,
; @4 }& T: V3 `( `& ^, e" o .name = "user_led3"," [3 m! b: J$ Q& k3 u8 J4 g
.default_trigger = "default-on",
" w3 h& w7 }" z( l },7 D+ i/ F N( c0 t, d4 c5 i
};
; t: Y4 `: O& p3 p+ ~/ p
- T1 i8 o7 o/ H Fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; s$ I& Z3 k' D- h .leds = da850_evm_tl_leds,+ h1 h! Z- L6 s; v) F* t Z$ [
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 @$ ?- q, Z G& R0 a, f' I
};0 \" S: T1 G2 r4 O
9 I; A: c Z9 X! G5 vstatic void led_dev_release(struct device *dev)
' Z W' j' {+ h9 Z1 E) z{
0 x; Q' l( L) \, {* \0 A3 K};
. k; p) X- ?, @5 t$ U% s+ [
7 ?4 O, k! G; V7 Y) @6 wstatic struct platform_device da850_evm_tl_leds_device = {& J% g4 z6 P/ V3 ?5 H7 ]
.name = "leds-gpio",9 j. H! a7 P$ X6 f
.id = 1,
2 o( R6 F7 j8 v* R6 z: P: B .dev = {6 X& w9 Z! M2 _ W6 ^$ G
.platform_data = &da850_evm_tl_leds_pdata," n# J% j3 o# V0 X) B2 ]- ?9 l
.release = led_dev_release,; G y I3 m- [% V9 e
}4 E+ O1 Z% E" H8 `* o2 O
};) {1 E2 L7 _; I; S3 Z; I
8 ^5 W' n+ j1 i$ p
static int __init led_platform_init(void)
6 G7 A* M* P4 `/ ]{& z5 c6 W) I/ E1 O
int ret;- u7 t5 V7 E: S% A. w* w
#if 0
k1 U8 [9 a; r ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ H" g" y8 S/ f3 z, K) M: p- v if (ret)
4 a- @8 Z8 D g: c$ B p pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# O* S5 K" O6 _+ v) n
"%d\n", ret);
* B# v, X6 g5 e$ F+ x' P+ G: T* [. Y+ b#endif
3 `, Z) x5 ]" Y' T ret = platform_device_register(&da850_evm_tl_leds_device);+ P8 z2 s' B3 }
if (ret)# v7 }( u8 N' B5 M2 ]. A+ S; A
pr_warning("Could not register som GPIO expander LEDS");
! x& D ?+ R6 _6 M! M; Q3 l Z1 Y else
* y( ^8 z. W; y! Q8 r% k( X printk(KERN_INFO "LED register sucessful!\n");
# \1 W: ^# y% Y2 J. A! p, R2 J' V1 S# t- G, |0 @" C" i2 J& V# S1 M
return ret;8 v* M, V# }" r+ S( J# B
} ~% j2 P$ J& l% L$ m5 `. h
! s2 r, E7 h% ~; {' }# T" v2 v, V
static void __exit led_platform_exit(void)0 M$ K" G. k3 W a' k& Z
{6 H; s @+ \! `' J- W3 t& p" n4 ^
platform_device_unregister(&da850_evm_tl_leds_device);
% g' e0 B' Z: L" Y6 z
" \ }* i. a& W% c4 g( ? printk(KERN_INFO "LED unregister!\n");
" m# ~$ B6 R6 y}
9 R0 q( G, f5 d' \/ p' l% h; W( _$ G' @: p; J- i# v6 L- Q
module_init(led_platform_init);* F6 p- l% i4 C: |
module_exit(led_platform_exit);& C6 G# v4 G |" L4 D* O* S
$ R& ?- Z* z( W& l B. ?" ^3 ^MODULE_DESCRIPTION("Led platform driver");
( m, v8 {3 b V) F) K/ l4 a- |, nMODULE_AUTHOR("Tronlong");
) \, r2 [# ?' x' q2 _, J9 \MODULE_LICENSE("GPL");
* j( ^ G: L! S/ ` E3 a& l ]. L+ j+ |- g" N
|
|