|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; n* y E8 j9 D. C1 w6 s
#include <linux/init.h>; z5 F+ `( U3 C% t6 [
#include <linux/module.h>
; T; G5 H& F5 A#include <linux/kernel.h>* \" f" R! c/ c( g! s
#include <linux/types.h>/ @! _" z" E2 J2 a t: O1 v
#include <linux/gpio.h>
/ j" ~7 F. ` D# d0 Q#include <linux/leds.h>; ]6 L# Y" o% [6 s' D. p( x# B
#include <linux/platform_device.h>
5 z1 B- s3 p9 E- n
! _- C6 [5 S$ f- C0 K, @+ S( ?6 L#include <asm/mach-types.h>% S2 b, X8 p8 y8 }# Y/ z
#include <asm/mach/arch.h>
; K' `& ~- K" |2 m#include <mach/da8xx.h>& X' U6 @! b5 v& p+ {0 x2 u
#include <mach/mux.h>: G& y b2 r8 \
" x6 M# t- d4 y, x2 q4 {
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ y8 g$ [8 H* E#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). T2 g. U. _8 u- f& ]. M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
a; }, u) F) r6 z- B, m: v: l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! ^" P6 L5 f2 }# q( u/ H2 J( q( ~1 u3 i
/* assign the tl som board LED-GPIOs*/
9 B! ~0 J' k- p5 Pstatic const short da850_evm_tl_user_led_pins[] = { @0 ]: [2 c2 s# x! {
/* These pins are definition at <mach/mux.h> file */
! d% g3 [: s/ d7 C# ~# R DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 T5 O- J; B, @
-1& D8 v8 M8 o; `
};/ B6 j7 o Y* i4 ` }" @
2 _4 m, [4 U4 Mstatic struct gpio_led da850_evm_tl_leds[] = {7 \6 ~$ X9 r9 y, C1 W
{& D6 Q; Q% z8 c% t# e6 ~, `. |4 r
.active_low = 0,, K- D3 J, ^8 r# [; X! S1 I' U% |9 Q
.gpio = DA850_USER_LED0,
6 \5 u- p: x: m) W' Y8 v0 [ .name = "user_led0",1 v9 A9 {( a6 |) ~0 \! ?, T+ ?
.default_trigger = "default-on",0 I& V6 x' ~6 a& Z6 a
},5 u: I* R; {4 x' g
{
0 Z: l6 o; Y* X5 Y3 z .active_low = 0," W! I6 ]& Y) J4 i( q' ]
.gpio = DA850_USER_LED1,1 z7 H9 F* @# H
.name = "user_led1",9 s" L+ A( a/ {+ f" U
.default_trigger = "default-on",' \; ]4 Y w: R$ f
},/ [0 R- N; T1 u+ `7 o9 O# t9 `$ ]
{% j V9 d# c$ _1 T/ |& ?# c" F/ k( ]
.active_low = 0,
8 H1 }: }+ n+ k/ l" K1 B; G .gpio = DA850_USER_LED2,9 \1 S2 \$ E" s" x2 [) v
.name = "user_led2",
5 L2 n2 e+ Y3 e' W g( g- d .default_trigger = "default-on",
# v W( {& \9 V) t% v% D" F" u) Q },. U6 P% O2 v: E* i+ L: u
{6 }/ a" Z' U: P( d' a6 e, B
.active_low = 0,
1 X7 M$ W8 y9 J .gpio = DA850_USER_LED3,
& d2 y( j5 h4 Q& W3 s+ F4 A. b .name = "user_led3",
0 d% i4 _, M$ f2 ]0 N0 ^ .default_trigger = "default-on",. N0 S2 m3 f0 c$ C2 i
},5 i: l; d7 N9 m! w7 X
};5 x1 X- z$ N8 Z9 w
* r& Q+ K4 E' L! fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, d! u7 j6 c1 Y" \2 i( m. x
.leds = da850_evm_tl_leds,
- }8 g6 h$ _( O; X2 j( C .num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 |$ d# u5 h) w
};
5 i3 l5 d2 f: q/ K/ O+ n/ O& @
2 d6 y4 s2 y7 L7 f. c, wstatic void led_dev_release(struct device *dev)
; X- ]7 C) _2 r6 {( T6 k& S. d. ~5 Y{
: |4 {* X7 p+ H+ r- h};
5 d$ [. @2 m2 o- g& h
- |2 m# x. N, u. fstatic struct platform_device da850_evm_tl_leds_device = {
5 d* O8 m8 C3 o$ r* V! p; h$ Q .name = "leds-gpio",
; e$ J1 O2 b( a8 ]( I( e3 P3 R .id = 1,6 l6 z! T* ?% p4 g6 S7 m$ h& ~" d
.dev = {3 N- z/ c& F# F+ T# D
.platform_data = &da850_evm_tl_leds_pdata,* d, u. {1 ~2 R* ~ M/ ]5 z" b
.release = led_dev_release,
2 `( N4 Q6 l u }. U) s( w* i; n
};
3 _4 j5 ~, E; @' C' ^2 V3 d2 M0 H' D# |5 `+ b$ P& s
static int __init led_platform_init(void)0 R4 b; `% \( M7 B+ Q: R9 ~
{! r* ~$ g/ B, r: a
int ret;
% w2 V! b1 j6 m- i6 b; W# ~3 ?#if 0: e* M) I- H; T% G9 [- C4 C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ ?8 j* J2 C: y; S& ?) M5 I if (ret)
; n- D: ]. r. ]- p5 A0 D pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ |' K$ w3 d* ]" T( Q9 q# a "%d\n", ret);
. e. A+ o$ z/ m7 S6 b+ n#endif" t0 @$ G& G+ f8 ^- U5 C
ret = platform_device_register(&da850_evm_tl_leds_device);
$ J9 X0 ?3 q6 y' G! ]6 V if (ret)1 a$ k+ J! I- o7 U: f; i7 t
pr_warning("Could not register som GPIO expander LEDS");; W' C( `5 {5 g8 s" r
else
3 N9 o% t+ P y ~$ W2 i6 ]! t# `6 d printk(KERN_INFO "LED register sucessful!\n");5 |- \3 v3 f& R/ C: G1 t
' @) C3 B: o. E3 v return ret;
" D% Y: O- Q/ Z1 w2 q# m1 t}
5 C2 Z/ L* A- E- w2 o
% W" g) e1 O' W- bstatic void __exit led_platform_exit(void)
9 T0 G0 T4 L# e9 c* Q) Y; R{
- d7 j" l \* W% Q" [ platform_device_unregister(&da850_evm_tl_leds_device);
4 B' ?9 U" M* S9 a, U
5 w' E+ `% ^! V/ k+ Q& t* z6 A printk(KERN_INFO "LED unregister!\n");& c5 A7 s0 h: q' C( k3 Y
}$ r( {8 T% r% g8 g8 ^& G
' y% T: ~1 y8 s- Wmodule_init(led_platform_init);$ [8 M' B6 P; A! L$ _/ d( y7 h- ]
module_exit(led_platform_exit);
+ q+ a: w( n. V3 G
4 {' j5 w$ T) Y; H9 EMODULE_DESCRIPTION("Led platform driver");, I( v* n }4 y4 N% e
MODULE_AUTHOR("Tronlong");
) K) e& w* F9 ?9 r3 aMODULE_LICENSE("GPL");! [. y2 _" j/ X) T p; K' X5 @0 R3 g, j+ q
3 l" q' f' A' G& \7 P7 h; d
|
|