|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ y) V' P- D5 z#include <linux/init.h>7 s; P j7 Y# h6 K
#include <linux/module.h>6 i5 k% f3 V6 G; o$ Q
#include <linux/kernel.h>
& K; z: }: @5 ? z1 U2 ?; B- v/ b#include <linux/types.h>
- h6 K! a' a$ T2 C#include <linux/gpio.h>/ X3 ~1 `8 D2 F! q1 b6 s# D. a
#include <linux/leds.h>
/ `0 w; X v* r2 `5 j#include <linux/platform_device.h>
' S- l) b1 @9 J4 L% z: i7 q- p( ~7 H9 X, [3 V; {" b
#include <asm/mach-types.h>2 d9 s8 H' r \
#include <asm/mach/arch.h>% `9 B4 _( g, N0 q. X/ ~! m5 Q' b9 `7 u
#include <mach/da8xx.h>
6 u! s4 ^, s/ G6 k' I( E/ l) C#include <mach/mux.h>
' M# V# p. ]2 M
; _9 t6 \' w2 o: Z# v( L% ^0 t#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); k" E0 h2 [+ `, O. s5 W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# U( C4 Y, l0 O) m- P; e
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ g, v0 o2 W, ]% t$ Q i
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. b+ [+ Q) i3 v* O7 F
& ^0 J& @) z7 i0 \6 A/* assign the tl som board LED-GPIOs*/
; W& K$ }/ h1 c' zstatic const short da850_evm_tl_user_led_pins[] = {3 Z4 ~7 g( D J9 C( Y6 _
/* These pins are definition at <mach/mux.h> file */
2 U4 Z2 _4 x9 T DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
e" P) \7 Z$ g0 }% _* @6 B -1" U# b4 \# {$ I! C2 g
};# K( _% s% R7 P, f6 } i0 A
5 }( X f. h6 Y- K; I/ i( Pstatic struct gpio_led da850_evm_tl_leds[] = {% r1 W8 L" A' h
{
6 N( n+ T/ q3 f% w$ P* r .active_low = 0,. e( t8 J- l1 x# U# {; C% H4 e
.gpio = DA850_USER_LED0,
0 K* ^0 w$ p! u .name = "user_led0",
2 a5 G1 r1 G: s* s( x) C& s7 d9 k .default_trigger = "default-on",
- M2 I- X# k9 p7 ~0 d4 O& { },
5 z; @& ~8 v2 ?6 ?% J' o {
+ Z/ R5 U& e% K5 C/ \ .active_low = 0,
3 b: {8 B% W4 V8 a* T: n! Q .gpio = DA850_USER_LED1,. ]" y4 q3 n& \6 ~) [
.name = "user_led1",
) n5 [' j {/ @) G1 d8 [# J .default_trigger = "default-on",
6 K0 x% ?1 J9 C' Q },! O0 I. |+ c+ Y" S
{
( D* k6 }& P. @$ H/ j9 z .active_low = 0,
) h8 D: T+ y( T a1 ~" k .gpio = DA850_USER_LED2,
+ V* h% ` q! |& R .name = "user_led2",
. H" M: ?' l: f$ b- I& e4 h .default_trigger = "default-on",& V, g# T- B( l2 G+ ? E+ G5 j
},4 A \' k+ U* p# ]! W( v6 [
{
6 i0 r# l% ]7 X .active_low = 0,# d+ T* K5 p& a- C, }% |* h
.gpio = DA850_USER_LED3,: Z* c* A" i2 G2 x( ?2 W
.name = "user_led3",
0 e% i, N0 K0 t' M0 ? .default_trigger = "default-on",- r4 F R; @$ ?2 R. a/ h& n
},
2 ~ }' g7 m0 _% q8 z" g0 S0 D3 B* d1 G};& X) A7 z0 [) q* Z, J
0 m/ S/ e. n" ~7 f4 c- y3 }static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 C8 @# q8 D- o! b/ X- q1 O0 I! [& q
.leds = da850_evm_tl_leds," M4 h* G6 ~6 L& Y& B3 Z7 U
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),! q, ?, A. _, j5 P
};( c% S9 D: g, z, A6 U0 u* h
- h1 x: A9 {; g
static void led_dev_release(struct device *dev)& I2 @9 O" }9 P; |# ]# H l% O# B8 D6 I
{- w; G3 _ u8 [; h0 X1 i) J8 c: N8 ?) Q
};
D1 G- T2 L7 q8 u: J8 e- n
: f& G, _6 S+ y, d# istatic struct platform_device da850_evm_tl_leds_device = {
9 k* D0 m; u: p t, a, l) D. ~ .name = "leds-gpio",8 z4 a. K2 [' I7 d
.id = 1,
0 J- L5 A9 c$ z1 e: p; v# G .dev = {
6 K$ Y% p Q% _$ T' z .platform_data = &da850_evm_tl_leds_pdata,
% m: s/ h1 f) U2 w/ {8 C- D .release = led_dev_release,
5 t/ C, W' g' Z; q- F9 G }7 i: }5 x' |2 D7 G: b
};
# b7 r) \! s- E: Q5 @% w1 g5 Q8 S( O5 N a) J- N6 J0 @
static int __init led_platform_init(void)" c$ a( d5 W% h4 o) o& _
{
3 G0 w# e t. Q7 l4 R7 l1 [ int ret;0 K" c" m, J; x# t" ^
#if 0
& M' u' ?4 n8 [7 z x; f; l ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 N9 g1 m/ L2 ^# o, \! Z7 s if (ret)" I8 N. L9 X# F, f0 O, c
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' P% v) S1 i. k8 \ "%d\n", ret);6 E( j r" m4 W+ K' j4 v
#endif
. P; [, H7 } o3 l& G3 L5 f) H ret = platform_device_register(&da850_evm_tl_leds_device);
7 l$ J; {% {2 {6 |6 S* k if (ret)
' Q# Y5 K+ z) M5 n ^ pr_warning("Could not register som GPIO expander LEDS");
* }5 K. P" n4 E& B else& I& i- [0 C' b
printk(KERN_INFO "LED register sucessful!\n");: v' w& P3 `: E* [3 [, g1 d) f
3 {6 P( t+ B. ~7 L5 p return ret;
A9 `5 \/ @8 X2 C( _' B+ z}# R+ _* T" z3 A2 b' F7 Q
) i/ z$ K% m( X1 r' ]static void __exit led_platform_exit(void)" v$ Y3 y/ A$ @; g5 y
{) {3 l4 v2 y5 S/ S8 J% B2 U, G
platform_device_unregister(&da850_evm_tl_leds_device);* o) t# `- Q' t2 a' S8 [$ r; F
6 p* H* w+ ^ M0 V8 N$ W
printk(KERN_INFO "LED unregister!\n");
; v* ?5 U- U- Y! @1 H9 o8 G}3 S1 x. T2 U- @8 J+ h# E
( e) p) i* J" r6 L; dmodule_init(led_platform_init);1 L, {( D' I! V7 d
module_exit(led_platform_exit);
! A; Q1 ^: M! L/ e9 P6 G2 n& ?4 S5 _( P
MODULE_DESCRIPTION("Led platform driver");0 [' f1 u4 e8 A3 B
MODULE_AUTHOR("Tronlong");
( V& Z. |8 U0 M' r" o' b9 Y; JMODULE_LICENSE("GPL");# L5 I( m% l( ~# H
0 [+ ]" M& u) n+ {& p( w- Y
|
|