|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 f3 A3 Z' l3 f) c1 ], h9 t
#include <linux/init.h>
$ ^+ B4 @% T+ i#include <linux/module.h>3 Q5 W* x# ~$ x$ j4 C+ t" H. t5 X
#include <linux/kernel.h>
; X. `; ~. z. w# E, E#include <linux/types.h>
; C1 G* W6 F4 c! I' p#include <linux/gpio.h>
+ w1 x( o+ Y0 s#include <linux/leds.h>7 m. U3 L$ Y# a) P, W8 E2 [
#include <linux/platform_device.h>- H7 Y8 {" e& a A
6 a9 y: v7 n, y6 |* ^
#include <asm/mach-types.h>5 c$ l: x W, U1 R. T) s
#include <asm/mach/arch.h>
) Z% H* [6 [- n# G; C D, S# X#include <mach/da8xx.h>
; S6 U( G: Q4 {9 [* [. R$ l* I#include <mach/mux.h>
9 g7 ]4 N9 q+ r9 S7 b' ~1 K0 L/ ~) }: k+ a ?% s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* B$ ~: o+ D; ]2 o! b% L/ [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; o: D; O; x# L6 d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" A. l- a, c! P# z, v8 }4 C+ L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: ~7 I/ B7 \# o2 y9 n
( E$ d/ Y' ? L# ]1 L1 L! H4 Q% f/* assign the tl som board LED-GPIOs*/3 C- _5 B- n' V; |! Q
static const short da850_evm_tl_user_led_pins[] = {
l& z+ _& R! i /* These pins are definition at <mach/mux.h> file */$ e, \1 c& g W9 |
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 e& b' m* q8 y
-1
2 |; U! q( A: J};& a( @3 l$ \. ]* c0 G7 [
4 ]1 e6 E+ m! P0 u$ i* P0 ^
static struct gpio_led da850_evm_tl_leds[] = {. Q# ~% R. X1 C; J7 @
{8 }8 E' _: c( R. r Y3 ? E
.active_low = 0,1 e3 n; a! [% b: ~4 e' b3 Z1 |
.gpio = DA850_USER_LED0,
1 Y& Y6 I- w0 E9 v: ~& S .name = "user_led0",
1 G9 w7 }* i9 \4 ~/ ^: A# B .default_trigger = "default-on",
8 t' U4 U; n8 P }," Q4 @1 k M) i, r! L5 ?7 I
{6 \# H; U, |) r3 T
.active_low = 0,
7 x2 Q) c1 Z5 x; _1 b! ~8 W9 \ .gpio = DA850_USER_LED1,3 f9 D. [% |( I& ~2 T" A
.name = "user_led1",
( I, `3 \# A+ X: t, C5 m( Q .default_trigger = "default-on",
* Y% l2 C0 M' J },, r. J& s: {8 g/ W% ^0 z2 N
{* ~, n) N7 r% L2 T
.active_low = 0,- k4 k; w& Y, f* f, s2 Y
.gpio = DA850_USER_LED2,
8 V/ R1 T' ^! a$ ?) l' u1 A7 o .name = "user_led2",
6 x# q+ }0 R3 j5 X4 ~) l5 [0 k% T& @7 U .default_trigger = "default-on",( r; c% D* Q+ g5 a* p5 }9 v
},: `$ K7 Y. G* O/ {- g! P- l$ Y$ K
{
( V( u+ e1 Q6 ]( d3 Y1 a1 w .active_low = 0,
) }. x* R( T; s) z .gpio = DA850_USER_LED3,
1 y* R5 c/ b/ ?: r .name = "user_led3",
& t1 z+ R2 {! q* X7 t3 K4 w .default_trigger = "default-on",
9 Y, |& H$ k) U2 A: E- ?4 p0 W/ b& y7 L },+ D; l# T/ T: y; l% Z
};( R G7 _0 F2 Q+ p- P/ [
. I& W A+ w/ A& Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 m. [$ f" F: N/ N .leds = da850_evm_tl_leds,; v( L1 @. c( T, r+ J, {6 `
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! D" Z( m7 Z8 O3 r/ g/ d' c L \};% U" h$ i$ p1 Z/ A# Q9 ]/ @
: K \7 o, D+ A" ?static void led_dev_release(struct device *dev)) ^- O( @9 \1 Y- y
{
, i7 d) k: |4 O7 u3 m8 N4 [+ u};1 M9 p! P5 S) R) I$ m4 I
8 P5 D' o) ~' K' m; _9 u1 t3 v
static struct platform_device da850_evm_tl_leds_device = {
2 x- i7 U% e# V: M1 [! ] .name = "leds-gpio",
9 N; r4 F1 v5 o& p, S5 c$ G .id = 1,+ W6 m9 {: o4 ?+ S" c! y
.dev = {4 ], {9 a! `3 T8 [, @0 g
.platform_data = &da850_evm_tl_leds_pdata,- o( ^# ^; A: x' u
.release = led_dev_release,
4 [5 s# f' c% f2 M" Y% r+ h2 P }, f. B0 C* W% Q* g) T
};8 g3 m" L7 e: [ v+ A6 u
* R5 C: b6 Z$ N$ tstatic int __init led_platform_init(void)
' C/ f" I# v; R$ L. w( `{6 p; J. u9 S1 A% G1 L( M+ c
int ret; D, D. e0 \, M. l. S
#if 0( K/ V, q! j: b+ w4 l
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& z+ s; V1 ?6 m8 k9 A
if (ret)! O7 W: n3 ~" z/ r+ T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# ?$ o' j: M' U0 A5 a "%d\n", ret);# \6 t, J6 R+ ^1 ~: o
#endif
) `* ?$ u8 H. t4 |) X8 z# P1 m7 E ret = platform_device_register(&da850_evm_tl_leds_device);
4 N9 o8 F# [! `& v; m0 W' N if (ret)
& e/ L: ^' o- k; b) i0 {2 u0 I pr_warning("Could not register som GPIO expander LEDS");
+ }9 [( {; O6 U4 y4 C else
' M0 L. E. x/ I5 J printk(KERN_INFO "LED register sucessful!\n");
2 \0 R2 H2 b" [% z7 h
\8 L" M1 e S+ r& L5 P( U return ret;
( U1 F0 B3 M7 ^* [}2 e1 Z( u+ I3 x1 {
; b7 Q3 Q4 c5 N2 q% }
static void __exit led_platform_exit(void)
( H/ h9 o$ Y' X/ B. r2 `9 D{
/ J& P3 }7 ~& F' ~( e5 ] platform_device_unregister(&da850_evm_tl_leds_device);2 f0 C: P8 {: Q# [
% f$ b% U, o2 Y6 R3 ?: e
printk(KERN_INFO "LED unregister!\n");7 t5 `6 \5 J2 c" I9 q7 {, @ D
}0 ~: D9 _5 \0 t2 c8 p7 \" K2 r1 E
$ N7 W6 u4 j) y8 t
module_init(led_platform_init);1 _% X0 J. D% I$ t. F D
module_exit(led_platform_exit);
5 G0 U- r/ \2 P' m+ T) \
) J7 U6 R' J+ R2 e: SMODULE_DESCRIPTION("Led platform driver");, c/ z- E! a1 h* o
MODULE_AUTHOR("Tronlong");' D5 P3 P2 F# D# H# d
MODULE_LICENSE("GPL");
% o5 i) \% l) p
! r; B" d' a; ~; [' a% I) g# g% a |
|