|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 C& }# j6 a$ B- x2 q#include <linux/init.h>3 t5 S2 C0 X# b) p3 @
#include <linux/module.h>
' O8 D8 l$ a' X1 k$ u+ \. J#include <linux/kernel.h>- Q8 Z: a6 G3 G7 d) G5 v9 [
#include <linux/types.h>& W( [3 M4 ~8 N- x" a
#include <linux/gpio.h>- ^+ T# L7 d# m( s9 p* [- D3 \ b
#include <linux/leds.h>
$ Q9 w# p& e; b#include <linux/platform_device.h>/ S1 S+ K; Z, R* A" z- f
( }5 K( b' |- f f. c: T$ |5 h#include <asm/mach-types.h>
. W1 X% W, b. h5 y#include <asm/mach/arch.h>
. w- k {$ k7 N$ I#include <mach/da8xx.h>, B' O) u7 O: n) r4 f) i6 S0 Y( Y( }
#include <mach/mux.h>
. W+ Z3 S* y3 o) y4 p% w& z9 U' ]- Q* W2 a( [
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): l+ C F# o, V% p7 C) f7 V
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' }( w8 W j' [0 N
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ U6 M, c/ E: N5 _/ d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 U7 H* B! U: ]$ ~
2 g! Z4 c- u7 q8 R- ?1 ^; J/* assign the tl som board LED-GPIOs*/
' V- T- B% M8 W" @9 j( K- z4 H) dstatic const short da850_evm_tl_user_led_pins[] = {
g- @- j& ~ |3 s, z- X% k* [ /* These pins are definition at <mach/mux.h> file */+ o- s* H- J" x' B) a
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 u% q7 C$ }/ _" { v' S8 M( Q -1
7 P3 ?# P, s( g! b m5 @1 [};, {6 U. D4 ?' _, w" u8 Y1 ^
" h, m. p; ~6 pstatic struct gpio_led da850_evm_tl_leds[] = {; H" b. v5 J" F6 L( @
{
( | ^& Z" ~6 x, t" x9 ^% ~ .active_low = 0,$ _% j. p e& C& j3 G% e) u+ L
.gpio = DA850_USER_LED0,
% _; }& A6 d' M" A- C# n$ S8 x .name = "user_led0",
& b4 ~1 B: o/ X) }5 _( c- y$ }* \3 I$ @ .default_trigger = "default-on",
8 C% n3 c2 M* V1 I( M& { },+ U* V5 @- ?" C7 h) {
{
" x# q8 C# r5 \+ j+ \* Q .active_low = 0,( l5 @2 d+ y* n% d/ [% }) i
.gpio = DA850_USER_LED1,* n2 Y" {1 H+ [
.name = "user_led1"," ^, \5 a+ Y3 Z3 v( p, [
.default_trigger = "default-on",. l6 _% s( ~, |: R5 O9 Y0 ~
},
7 P* t w: D- R! Q, V# N { D6 b. g9 V7 S9 l; O
.active_low = 0,
7 v, S2 }2 _7 M .gpio = DA850_USER_LED2,
# u& @- e" K- t" L+ J, r2 Q .name = "user_led2",
) b; N; y+ i6 I1 R4 c .default_trigger = "default-on",, O# [- ]3 s/ p8 q
},
$ c& K3 M/ g. v3 q {6 G y# i h( Q, m
.active_low = 0,% k: q) c a/ W( d; A; h
.gpio = DA850_USER_LED3,
- d% X- V4 ]6 r- M3 d0 o/ g; e .name = "user_led3",
, m$ Y9 E& ~4 h! v .default_trigger = "default-on",
) w2 s+ m; i# `' @+ s6 o3 W }," E9 L- R4 B/ N- c
};
, g, @" m, h) z" y0 d) N" ~( [5 `* S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 L! S& l7 v/ T5 ?" y0 Y: ?* [5 R
.leds = da850_evm_tl_leds,1 Z f( a3 J5 v4 F8 ~8 J8 x
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# Z' Z% Z+ R4 L& E};; b4 X2 o1 V1 W& I8 f) O% Z
2 i5 w% o2 G0 i) pstatic void led_dev_release(struct device *dev)1 F4 }- s/ U9 W
{- v4 K/ H9 Z% H( {7 U
};. e, I; M M& D3 e8 ^
+ Q9 I$ R7 a2 e' I) C, Y- o) |9 o2 F
static struct platform_device da850_evm_tl_leds_device = { [7 T8 [7 \% H5 T: T4 P- ]
.name = "leds-gpio",' R' w G" W. A4 Y" C7 v6 H) }
.id = 1,' u& [* I0 r) }! s/ f
.dev = {" I; \0 ]# n) Q. h
.platform_data = &da850_evm_tl_leds_pdata,
& a% V! s! E& s6 x2 Z/ F4 | .release = led_dev_release,
9 l0 G" u! p$ I# {, R& { }; _: k( j" v+ [% C, \, S) _
};
/ U: L, ^9 G3 r+ Y% P! M- Z0 s
static int __init led_platform_init(void)( d1 V- d0 t: R, V
{
4 d) J; `2 b, W* ] int ret;9 m" F+ a$ `5 R1 l; J
#if 02 @, a# \/ n! y8 R: M+ v6 G& G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 O! B. z& W5 I/ E) z c$ V if (ret)
. |8 `4 [2 G" N0 }. _/ [! K( [ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. Q1 D4 w- T& ~8 [) |$ ` "%d\n", ret);& z( A( \/ m) e: q, p G- X
#endif
- A! K& }8 ?( k3 s O' d; P ret = platform_device_register(&da850_evm_tl_leds_device);2 @+ _% ^% E5 `. s6 c# \
if (ret)8 h4 k$ d- b& S) Q" X% M; w
pr_warning("Could not register som GPIO expander LEDS");
. @( [: ]7 s6 l) W else
9 j. v' I7 ]& l8 p0 v# o printk(KERN_INFO "LED register sucessful!\n");
: ^ J' `2 s; A+ M( C: n A2 j5 p4 j2 q
return ret;
* ^2 N5 H; U( g2 }}
# I- O6 o6 B( f5 w2 G K- R0 _; P; u( h J
static void __exit led_platform_exit(void)
/ x d6 y/ \! T, O7 f+ X% m{
6 }) ]$ [# T2 p8 f; m) i platform_device_unregister(&da850_evm_tl_leds_device);
, T, E! H9 }0 {: M9 B8 B% \. g! f) |& @: C
printk(KERN_INFO "LED unregister!\n");
" g% K0 x6 e6 d4 H; P) Q$ v}
* q! X: M' t% h* `
' W8 A4 u; C ~$ vmodule_init(led_platform_init);2 N: w/ F+ J( O# p7 B2 m! ~
module_exit(led_platform_exit);9 S M' W/ b) Y/ P
: ^; X. F4 A' b0 ~MODULE_DESCRIPTION("Led platform driver");& Z2 s+ @6 n" Z# ^7 E! Q
MODULE_AUTHOR("Tronlong");
+ I3 I( }6 a( y4 V9 t, \MODULE_LICENSE("GPL");; E5 J. v9 y' o$ H2 i/ g( U" @
% p. [% H+ x! a8 u2 \4 x |
|