|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, P& g: |! V. |) w4 T; f#include <linux/init.h>
H% Q; J/ `' }* Z% n#include <linux/module.h>
4 X3 {$ O% f9 B1 E: i: v#include <linux/kernel.h>; E, Y3 e$ P% y; x# a' Z
#include <linux/types.h>1 m) S5 g* N; M' U1 ]5 q O
#include <linux/gpio.h>
5 R8 c! b5 W9 K8 N; l6 g#include <linux/leds.h>/ d: c/ Z4 w7 o, N
#include <linux/platform_device.h>6 S! U- p% P( Z2 Y5 F" H
; |1 g; S- B. f& D* T, b$ ~% P
#include <asm/mach-types.h>" G7 j6 W& J U
#include <asm/mach/arch.h>
) W% L* _* d. s/ ?% C#include <mach/da8xx.h>
( R# W0 p8 @ { f#include <mach/mux.h>
) \/ M) a- A, n% z# _6 R O0 r* Q* S5 ]- Q' j/ f! H
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' S5 A- `" q: ]- W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* B- v0 T- B7 d6 t8 k#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 w6 b) z) V- E; d. x- n* o( r9 `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ H) L: H, |, m( v: ^
, ~. v+ J; m! S" V( t3 x9 r/* assign the tl som board LED-GPIOs*/
7 f7 }8 O) x1 S- }: lstatic const short da850_evm_tl_user_led_pins[] = {" I' i0 M* u( W; ]
/* These pins are definition at <mach/mux.h> file */
5 C. Q0 s/ A- F0 m DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: O: K( S) s3 G5 ]: x) y -1( B2 E# F( L3 f7 L# p. a9 L6 b
};* ~7 T- G R N/ w& v
8 N' i8 P7 K3 |' i: Q9 {' Rstatic struct gpio_led da850_evm_tl_leds[] = {
9 M( T5 K5 j% e$ R2 K' ^ {4 Y! V d. s8 X3 e% A! L; q$ k$ m
.active_low = 0, x5 o, o& l1 ?/ i/ O6 [8 l
.gpio = DA850_USER_LED0,
3 z' |' p2 `- c4 R7 m) x) e .name = "user_led0",
) G% |( P% h0 b: c# U8 I" F .default_trigger = "default-on",
/ C8 B% e2 a( _) H% G },9 E S. r! Z. j9 m3 J* F
{
9 F" {/ j U' }( d4 v7 A$ Y .active_low = 0,+ j/ }8 ~9 h# r5 h
.gpio = DA850_USER_LED1,
1 l$ G. }2 M1 i .name = "user_led1",1 G& g' o8 q. J
.default_trigger = "default-on",
( Q C; Q( t% w+ e },
, H4 T: ~% j/ P; I2 h0 n {- j+ v% X& Y; u/ {$ R
.active_low = 0,
/ U# s4 f0 f" \- x .gpio = DA850_USER_LED2,
' X# k( j% C( a .name = "user_led2",
; ?/ q6 n* p v- |% u# H .default_trigger = "default-on",
" V, e: X: j4 l1 c },
! P$ S' r: [1 c- z( c {
. v# Z- P! t7 M! V8 E( r .active_low = 0,+ w& W5 W' w, C/ R
.gpio = DA850_USER_LED3,
' t7 i8 c: T) u. i3 c6 P* e .name = "user_led3",. S4 o: ]% q! u& H0 y8 q( H M
.default_trigger = "default-on",5 e. |- r r& a1 i
},+ D' d, M M( T. U
};
C' }! L8 [( z4 f. B: ^/ @! e
! O4 L1 `. @" p- O; D; mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 s& m; m% e' V8 W% N5 h
.leds = da850_evm_tl_leds,/ ?9 s& A- I. K& {: Q" `( T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 t7 n, L7 V3 i0 t5 c0 m/ F};8 E7 r+ E* D0 f) z9 r$ B
" u# \ L" O0 A( _4 w
static void led_dev_release(struct device *dev)
7 ~) \( o& U+ K y; |. j# g) [{3 W1 Y+ ]$ X0 ~
};- _; u7 a( t( Q8 a7 F3 Y' h
) U6 r9 }6 X/ D+ `7 M6 ^
static struct platform_device da850_evm_tl_leds_device = {
: V ~$ [; t* K) ? .name = "leds-gpio",2 L) y, Y' N+ \3 i
.id = 1,
! l+ I% l) A) Z z6 t ^ .dev = {
) \3 S. t4 e/ ]) F .platform_data = &da850_evm_tl_leds_pdata,
' U( {5 C6 Y6 M) \1 D E .release = led_dev_release,
/ ]8 N* A5 G( ~3 G }
; t* F9 o3 O$ \7 L7 T9 [; I};
" U5 w# r! j& X4 V; X
; Y% n) {! Z6 f" s' Q; istatic int __init led_platform_init(void)
- q( q- k4 w& }1 q/ e! i; b{' R6 y7 @; O$ J2 ]. M* l# ^& |
int ret;# C' t7 v& J" p4 e
#if 0; y7 j& s# |! ? p0 F5 B
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 Q' l! X: k4 \
if (ret)' w( ^# {5 o" Y) j8 e$ z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 r' a6 B5 R8 |- L2 o0 o "%d\n", ret);4 J/ G* A: a! U6 h5 m3 r
#endif
- W2 j' L9 k5 `9 s- g( w! t: S1 V1 b& R$ z ret = platform_device_register(&da850_evm_tl_leds_device);
2 Y/ B5 ?" V+ m" H ^# P. x$ m if (ret)
. Z* p% Z- A+ ^. f8 ]8 b1 ] pr_warning("Could not register som GPIO expander LEDS");- k/ Z, f _: i' ?1 }( Z+ P
else
6 U0 T& g8 S0 z9 F$ G4 C. Y. Z printk(KERN_INFO "LED register sucessful!\n");2 O; j; C$ f% m- i5 m ]# E q
' l: E) i& D# h. A
return ret;; G( s0 M" a8 \1 O# ^
}) N# t _) F. o: }8 G
, ?& Y% ^* x2 l4 Wstatic void __exit led_platform_exit(void)) ^* G. N+ _0 y$ e9 o
{* Y/ q3 M0 d2 c5 D
platform_device_unregister(&da850_evm_tl_leds_device);
6 Z, Q0 ~9 M& C, v
* Q' ]/ E) v; t, @% J) f printk(KERN_INFO "LED unregister!\n");
5 r2 e. I4 k( {5 w' ~ B* ~, n, Q}
g4 e6 i3 ^ g
; I2 N+ H3 C% q, E! G/ K, B3 _( Hmodule_init(led_platform_init);6 U& q# Q- k6 r K; r" ^
module_exit(led_platform_exit);" t/ b' c0 k8 L: m
0 [* Q2 Y6 O- l' s8 I' OMODULE_DESCRIPTION("Led platform driver");
% H4 p8 K% d0 {+ p, [, A; nMODULE_AUTHOR("Tronlong");( K4 d- S$ [4 e; n1 N7 w
MODULE_LICENSE("GPL");
$ n; A$ n, K' Y D
, f w/ K, g, _% l/ N |
|