|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* S- s+ ^( @1 D# C4 H; R#include <linux/init.h>
" x: t" J/ G% Y( z& X3 q: [#include <linux/module.h>9 \+ W ? w; {; K7 J" p
#include <linux/kernel.h>
/ N- B: ?" `9 M" x#include <linux/types.h>
3 z) C y" P2 {- e2 K) d#include <linux/gpio.h>- e% ?. q7 P B. Y
#include <linux/leds.h> {4 f5 y# t+ v: f# F- l
#include <linux/platform_device.h>
$ V: Q' c0 ?4 l+ D Q" p
/ O) v% R0 F5 `& ~! a, b#include <asm/mach-types.h>/ @ Z1 [) `* m) b) e: {) t
#include <asm/mach/arch.h>
- y" s; F2 N: F4 z#include <mach/da8xx.h>
2 p# n7 k6 P% u$ j/ L#include <mach/mux.h>
+ r, `/ K, B% \0 E
6 ?! A+ B; Q/ { Q( {$ K2 b8 z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( _7 C0 z) W) @2 m& u#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 F) G" C# _1 z: r$ Z3 v9 q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 w6 _ Z: y/ l' O/ L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 T8 K% r; n9 W- r
/ t9 E S3 O' i' q$ e/* assign the tl som board LED-GPIOs*/' m; [, z, _# e* W1 x$ E! {. U
static const short da850_evm_tl_user_led_pins[] = {
2 D- ^* x' I* K3 n$ c /* These pins are definition at <mach/mux.h> file */
2 ^3 U C- O7 ^5 F) z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( k7 Z& O& T# }* c9 s8 M! T
-1, \' t5 b1 O) g: S2 `% [0 A
};4 U- z- D2 u% C. g2 ]
( m: Z/ w5 ?% c! P7 |
static struct gpio_led da850_evm_tl_leds[] = {
1 H" L6 t' t3 Q1 V% n: V {4 W# ]7 N2 v' \0 A+ b
.active_low = 0,
6 V$ `2 q" @% L$ H; g; V' z" f, q .gpio = DA850_USER_LED0,
9 p: x6 i1 _; e q+ v/ p% H .name = "user_led0",
7 o. k- i0 R% ^; G" i .default_trigger = "default-on",
2 G2 i# Z( T W5 C3 B) I- J: A2 G },0 x! Q9 P$ I6 ? `8 z# G
{
/ i5 h. L0 }9 y0 t, M .active_low = 0,: D+ \/ s0 }$ w7 Z6 S! A0 o
.gpio = DA850_USER_LED1,2 S5 h% k ^% x/ i& N
.name = "user_led1",! H+ q* c8 \# K! f
.default_trigger = "default-on",
) y; |. b$ T1 |. I5 R, P },5 u' r2 I, d4 o2 G: T
{
* G ~7 B/ C$ s4 \4 y1 q .active_low = 0,
. T% _ }# M; A, V! M .gpio = DA850_USER_LED2,! ] g; w- X+ {) c2 j: K
.name = "user_led2",
' j/ ~. U% p1 L2 A, m .default_trigger = "default-on",
3 U' H5 N$ o; m6 ^6 S },
( F8 X" C5 ]8 x {
0 [% O+ O" C( a5 F" y .active_low = 0,
; |+ W; V, c" u6 o, F* b! ?6 } .gpio = DA850_USER_LED3,
- b$ D0 W* O" o .name = "user_led3",
C. D' l3 Y4 {( |& N7 { .default_trigger = "default-on",
. Z( r# a; v# ~8 |0 D( @ },& |- A3 e& o! ] a, s" [1 c
};
8 `5 @) z% s; y1 o' M j. ~0 j; H4 `
, w" h; k2 R" z4 B) N1 W5 s2 mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 H) N6 q$ g8 e9 W .leds = da850_evm_tl_leds,% j( @! O5 l( d/ R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 c# ^" p" i# L* N
};$ {; e# C* ~$ d p
$ J8 Q/ {( i% f) H+ {& Z1 g
static void led_dev_release(struct device *dev)6 c; [) L; `+ N& _6 g1 c
{* R; A8 Q5 ^6 @5 {
};
8 d, `8 t) _& {; t, g* Q$ n
4 t( E5 W6 @' }" x8 pstatic struct platform_device da850_evm_tl_leds_device = {
% o: t2 ?" E: O* ^: X .name = "leds-gpio",5 v) a+ U' J1 p: b) g5 M! |
.id = 1,1 r J+ J% C9 m; g: H& e5 @; Q
.dev = {
/ v/ Z! W/ a1 @* ~ .platform_data = &da850_evm_tl_leds_pdata,% C* f5 F$ Y" j
.release = led_dev_release,
8 v6 h& T3 L. a }
; i' J7 O7 h( t, J};% o+ ~" Z* F* o {1 O8 F5 X( j4 s9 ^
+ B2 L1 K3 j$ A$ [static int __init led_platform_init(void)
/ T3 e- H, u" G( `2 n( i4 N{5 K7 {7 X# m$ I, `% Y: J$ x s
int ret;8 y: p( N4 E5 O& T
#if 0- R% Z) {3 F+ k/ @$ {6 N
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 f& u8 e! D- Y2 Z+ ~- A
if (ret)4 G: f) L* B# ~ E1 F
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ ~4 ^( E# H7 D, Q "%d\n", ret);
# O& y$ H9 g4 _#endif
2 X) v8 K; a, V; u* S4 X ret = platform_device_register(&da850_evm_tl_leds_device);
" r! Z: n! N0 n2 r& Z if (ret)( D/ r! H, P! t3 k' Y
pr_warning("Could not register som GPIO expander LEDS");, U, J5 |4 D3 j; Q9 p; ~, B
else; B4 V5 d3 f+ I
printk(KERN_INFO "LED register sucessful!\n");% A# b2 i$ m6 @, P' V7 u; T; f
* r2 A/ ~4 o% L$ r H8 M/ F+ F7 j
return ret;" U5 l. y" \7 c$ j6 B! m( l& G2 s
}
; a0 ]% I5 h# [# f$ F" t: I( V/ x2 J
8 B) m+ w+ d( _9 n U* }. Sstatic void __exit led_platform_exit(void)
3 M; O$ M6 @. Y8 W! U! o! i9 |{
1 o2 P) v: q0 R. q+ w$ W platform_device_unregister(&da850_evm_tl_leds_device);
* Q$ I( ^; T6 p
5 U4 E2 f7 n2 {- t- |0 C" t printk(KERN_INFO "LED unregister!\n");7 T1 a. R" }0 P2 y; G
}+ ?" i @% s- H
* O. V6 F! e; V& I
module_init(led_platform_init);" j( f9 c% F( {# U6 H0 m$ B
module_exit(led_platform_exit);
- A' x% Y5 x- p* M9 }" v: [
3 R$ d' R! }1 _2 }+ A/ _9 Q' VMODULE_DESCRIPTION("Led platform driver");! A% s8 |: \- R- A( P9 A
MODULE_AUTHOR("Tronlong");" Q% K. [* x! A; }& N
MODULE_LICENSE("GPL");8 V# ~" A, ^0 M# I+ k
7 R0 n& z7 R! g* E& j
|
|