|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 t& [0 ?+ X/ A8 y8 t4 q! i
#include <linux/init.h>3 b; \4 b( k; l/ h1 t6 T! |# h
#include <linux/module.h>3 U. i, i2 |: ~2 h; }9 q& u$ F% u
#include <linux/kernel.h>, z( ~( }9 E T# b
#include <linux/types.h>
7 J( c/ I( `3 v/ O#include <linux/gpio.h>( D0 _% J9 e$ s
#include <linux/leds.h>
: v2 ?' M1 r# R7 E) p8 S#include <linux/platform_device.h>/ P! T5 y. o: ^* L& e
1 R7 H, I) e5 J+ y5 F" r6 i; D#include <asm/mach-types.h>7 U% i3 h+ o t
#include <asm/mach/arch.h>
i! z4 i3 Z' \& L) A* I9 O( j) m#include <mach/da8xx.h>2 z& P( C* [, [) V
#include <mach/mux.h>, I( m# d5 i2 E \8 V/ l
" y8 b2 y: S( ?/ X' b& ]: U0 u* F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 p( |( ~( E4 p
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 D& e/ @. V: C# K3 e9 J5 x& N
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# |9 c; J3 K5 b1 l6 \' K0 y! t% e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 y. Q" B8 v; d6 H% l. ?
' o6 B0 o6 \7 G' b
/* assign the tl som board LED-GPIOs*/. f2 R8 U. }2 M; }
static const short da850_evm_tl_user_led_pins[] = {6 {- U; v( S" N0 y! {+ Z" H% D
/* These pins are definition at <mach/mux.h> file */
9 v* ]8 E! h7 k9 K* n/ d# f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( L: S& V/ Q. v e; u/ j3 H2 G
-1
4 ?/ i. E) z, P3 q) C7 n ^};4 I z% w6 v5 b
! K/ e. S) B8 X# P) Fstatic struct gpio_led da850_evm_tl_leds[] = {2 B$ ?* z& E/ g1 u* j
{3 _7 X1 R0 n- A2 T1 P
.active_low = 0,, T( s5 {: Q0 W! W- X7 t% d0 u3 I1 a
.gpio = DA850_USER_LED0,
% m1 `# ^4 n0 y. R+ i0 K* c" B .name = "user_led0",
! w- ? Q7 G6 B& u# Z; ~( V .default_trigger = "default-on",
8 f1 y; X1 g- s& P/ e- P- q },
( b& O4 x3 F: @% i {- a+ R/ e6 G d5 C9 l' F+ {: N5 Z
.active_low = 0,; j8 z8 O% f. Z* c* S
.gpio = DA850_USER_LED1,
7 M5 R% L( t6 d2 a .name = "user_led1",
& j, O ]4 E2 B) V q .default_trigger = "default-on",
: O" U' |8 Q1 A# m5 j r },
0 c' \7 t( Z. n+ Q5 r/ }$ v1 g/ c {
, M0 K8 d$ m% c3 ] .active_low = 0,0 T' t( |- R! V- j5 G+ @, F# d
.gpio = DA850_USER_LED2,
# h: x. x; M4 k .name = "user_led2",) O. {, f1 K; m& I* R
.default_trigger = "default-on",
" }# d9 Z$ ?9 O8 | L' N4 B }," E$ r8 K& _! E7 C- P" h
{5 Y$ T8 d4 p! K8 o3 b) W
.active_low = 0,7 [& k- l/ l0 n% b( r* F
.gpio = DA850_USER_LED3,: l) v# z8 [% ~. B$ h- M
.name = "user_led3",
7 Q# X: K" d- i* e1 p# w7 k .default_trigger = "default-on",4 p6 i* G" r& ^0 i/ }& s( g
},
5 n* y0 d6 d" M* N5 v1 D) x};
/ o' j1 Y7 H: i: E# G& n1 v' ^" O& a( K- O6 j. `& `
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: k1 c5 k4 h: d. q .leds = da850_evm_tl_leds,2 T8 @' y. `- O# D6 ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* J6 A+ U" B. u, G' y$ N$ b+ _};1 \% j! R: t6 S: o5 D8 B' t }
" e; q" `1 M* N% e: ?
static void led_dev_release(struct device *dev)
7 i7 H9 u3 i& E `# E{
9 p+ F4 O2 g/ [: j# Y# A};, X: Z! G' W, m/ E2 g, [
- R( {9 n n( K8 I7 h7 C" V
static struct platform_device da850_evm_tl_leds_device = {
& A+ k& \ Z. _1 D+ \0 v .name = "leds-gpio",
4 k2 T' O! {2 v9 S% U .id = 1,+ g: |) u' F1 x3 [. Y5 C
.dev = {# g0 F1 b5 D; Q6 u
.platform_data = &da850_evm_tl_leds_pdata,
! D( N& o7 b% E! D$ c6 h" k .release = led_dev_release,. _( q! w0 \) C- f/ \
}# ]1 t3 G" ^# r8 p7 M+ n
};- g" T/ q z5 ~( d7 L# a0 w
6 }0 c3 D& L g0 L5 g4 Istatic int __init led_platform_init(void)
, f. j# O' c' O* ]{
) Z5 o. [, M. ~) s. v. G int ret;
( [- q4 D; P$ U% b n; \. L8 e5 N#if 00 y3 T) h2 J( S" u! Y0 {! j- K7 u
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, x+ t. u e% R0 Y" W
if (ret)2 ^- H- c; Y* F& _6 Y; q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 w2 `5 ?1 ?/ t; w4 @. ]
"%d\n", ret);
. M3 _" N6 W' X! z2 T9 ?0 X& ~#endif( Z5 t/ L' h5 z7 r
ret = platform_device_register(&da850_evm_tl_leds_device);; i) ]3 u6 o9 d
if (ret)
8 v- r: c6 B4 p5 J; @ pr_warning("Could not register som GPIO expander LEDS");
) n0 r, p6 K# C* \ else& X4 p4 z4 y, ?
printk(KERN_INFO "LED register sucessful!\n");
/ |1 D7 u% n% @# f: l' T/ n1 M. t
return ret;/ {! s, p& d0 r7 i8 M; c
}
- }: @1 B( ?, ~: [4 ?$ Q% w) T# ^0 Z" v
static void __exit led_platform_exit(void)
; G, w. h8 R" y, ^7 s; f{2 g. c) n9 `, K% u7 |5 i
platform_device_unregister(&da850_evm_tl_leds_device);
. V1 `1 a- d' x w
) U& y1 `( o8 g: m) [$ d printk(KERN_INFO "LED unregister!\n");
i9 a7 b9 N. p9 `}
" |% L, L7 E9 ~- t/ n
, z* B0 b% t. `0 o2 fmodule_init(led_platform_init); }5 z) ?; D) C/ \ ?$ ]4 o( |
module_exit(led_platform_exit);
4 x! v _2 L ]1 I2 @( ~. i! F: e# T1 u# U
MODULE_DESCRIPTION("Led platform driver");
8 \; q% m, s- G/ ^8 V% [2 DMODULE_AUTHOR("Tronlong");$ x, P% r Y% Z4 t9 H! n. e4 U
MODULE_LICENSE("GPL");
9 A$ b6 k! {3 Z- I8 j1 o& ^/ P: m
|
|