|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( [" }7 d+ S4 ^! k% l% v8 a
#include <linux/init.h>; D; q) b# e( P# O3 W
#include <linux/module.h>- Q1 c( L5 M# J2 j; V; t' O. ]- q$ h& R9 J
#include <linux/kernel.h>7 M! d1 D5 m7 F: a3 n+ I9 F' {5 k7 m
#include <linux/types.h>( v" s$ F d" H
#include <linux/gpio.h>7 X$ c- d% o: T4 u" g( K
#include <linux/leds.h>, b+ f3 {3 |5 ?0 M9 ~% ~
#include <linux/platform_device.h>
* l n% d$ ~2 b: ^
9 p6 L* g( O' u" e#include <asm/mach-types.h>
" ~2 Y* y! R. h2 ]; R! }#include <asm/mach/arch.h>
/ ?9 V) R) `, P" }* l. h: O4 d#include <mach/da8xx.h>
q# E$ V" X. ]5 {#include <mach/mux.h>% n& w% V. [3 N5 @6 [4 ^0 p) A9 }
9 ]# a7 r2 c V( m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% F4 b. P5 k2 [
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); ?+ R, ?4 W- O8 B% }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, y( ?' H. O3 f- H% D#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! r: N! t8 _: g8 W% o; w4 R! ?! G. V4 H$ v: ~( o9 q C
/* assign the tl som board LED-GPIOs*/
* x+ Y' I6 R- f0 Z" Jstatic const short da850_evm_tl_user_led_pins[] = {
" D! H/ `6 B/ K4 x2 U /* These pins are definition at <mach/mux.h> file */
$ p4 l# h- d0 H3 l DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ t. W/ p$ H/ z1 o6 y -1" a7 U! s( i3 [' o" |5 }+ A% u
};
9 P% c5 o6 Q ?: a; I1 e' f& Y0 H) g$ {
static struct gpio_led da850_evm_tl_leds[] = {* ]/ |- n- ] f% i! r' `! q
{; d# }7 h" w+ X
.active_low = 0,
2 ]+ J3 Q/ T) e3 V2 M+ j( M .gpio = DA850_USER_LED0,# f1 T! l& T( O0 c% a( p2 z* T# w) _
.name = "user_led0",& F1 A' [( @. h% k
.default_trigger = "default-on",7 ]! P2 @7 W7 h* l$ z
},. v* K3 \* R& F2 f
{
* O" I q1 E9 C6 y- F .active_low = 0,
6 y& Y9 H1 O7 I: |' Z! L. x .gpio = DA850_USER_LED1,
T) x( m- _$ G, a .name = "user_led1",
0 s3 W8 z" r8 }6 Q& Z% Z; q p .default_trigger = "default-on",
6 D+ S9 Y I+ N+ W; L },( c! H, C% M& p* m8 @3 |# W
{2 `& a. l9 r9 k! Q/ y
.active_low = 0,
% M: z* z: W# p f. t .gpio = DA850_USER_LED2,; C3 P1 t" ]5 X
.name = "user_led2", k; n6 l' X6 y
.default_trigger = "default-on",
! }6 f# H5 }5 Q, M1 @+ Z$ u },3 [$ v4 @9 C6 Y" M
{
n h. K3 q1 } .active_low = 0,
1 S% f, P4 E/ X- g .gpio = DA850_USER_LED3,
: h* p! |, |/ F" D* ^' y( R .name = "user_led3",$ j. j2 W$ D& V+ }+ o
.default_trigger = "default-on",# Q" B) Z1 Z" H4 m; [: K6 L/ r
},
3 S3 b# r* ] b& X' u _7 G: a7 c};" I& Z" q6 o* a2 v& Q
, Z4 {& X7 M9 Y* Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; D& f2 c1 X5 b' N4 B
.leds = da850_evm_tl_leds,
8 ~8 |6 O1 {1 m6 W! H3 N7 E .num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ X; M/ H' {& f. N" e9 ?
};; \. y' e- d- [& e5 Q& ^! d
2 v- j k$ @- g
static void led_dev_release(struct device *dev)
2 R# U1 E' @/ t; z; T3 }) D{
+ ~ L# n/ \9 s7 A) d ^( [};
' [8 e( D6 c. r6 c, h: d1 F- e5 ]& Y5 B b
static struct platform_device da850_evm_tl_leds_device = {
. M v" V( {* F5 b2 S( x, @ .name = "leds-gpio",
9 f: L% X) @1 O- u0 f .id = 1,3 R: { N3 d7 `0 a0 G1 i% H
.dev = {
$ c& O: P, c8 q- r; f: U7 D .platform_data = &da850_evm_tl_leds_pdata,
- j5 C2 `) P/ ?$ R .release = led_dev_release,1 \0 ~% A: q3 Z, E8 G9 ~# G* |8 i. k6 s
}
) @2 A/ l; p2 S/ i; k};
% [# O4 N8 }! M5 u4 y: ^- N0 c5 w4 O! N! ?
static int __init led_platform_init(void)* ?, @3 X; f. b# p& U
{+ U$ y% f8 L4 w- E2 l+ ], N
int ret;6 X+ z+ a. H) O& _
#if 0
5 X- _. H' ~1 [ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, [. q1 s. h) \
if (ret)- d: H6 _0 i8 n0 y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ a9 ]: @3 ~, w7 |# {; g( N8 @
"%d\n", ret);
( Q( p1 T: j j/ }( t& v/ O#endif* q+ i" k* D! u7 B, X
ret = platform_device_register(&da850_evm_tl_leds_device);2 {# z) w+ D; y( u- N' C& v4 S9 E0 O
if (ret)/ K+ i7 z8 S \+ F7 t
pr_warning("Could not register som GPIO expander LEDS");
8 ?, l9 S2 u" Y0 m+ m' D; ` else. [+ v Z4 c) e
printk(KERN_INFO "LED register sucessful!\n");' x7 i# e: D- z$ h. |
1 L. _, I B) Z7 x) \2 h2 _
return ret;7 v& a" w+ }; ~% s
}" d- D. t" w; O0 m+ S8 W
& v/ Z) H5 Y& F. } W
static void __exit led_platform_exit(void)
5 l M! Y0 x9 L- o{
. A3 b! b2 P: L' }: Z& j D platform_device_unregister(&da850_evm_tl_leds_device);3 f5 _+ H* ?( c; ~0 N5 w
6 l' y9 t5 \& l8 |& L# D printk(KERN_INFO "LED unregister!\n");3 w: z7 ~8 ^7 [$ W9 K0 s u |& M
}; D2 r/ e8 ~' ?# s
' S: e& e( F, R* D- e3 `
module_init(led_platform_init);
' c: d5 z+ c; y, U4 O0 M8 Cmodule_exit(led_platform_exit);
$ _7 D/ @& t' Y; l+ ]9 Y9 W8 H6 e% }' e2 q1 c% ]; f, s
MODULE_DESCRIPTION("Led platform driver");- O8 ?6 k' X" |. \) N
MODULE_AUTHOR("Tronlong");4 A6 T6 B d1 A* |7 Q& g2 s
MODULE_LICENSE("GPL");( u* }2 Y+ q+ D5 X
* i2 Q a+ G, I, m9 ]- F
|
|