|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; m! P5 B. K+ X: s4 u#include <linux/init.h>* o" S* z: W# g* P8 O
#include <linux/module.h>
, J7 b& P$ A! v. x- A: y#include <linux/kernel.h>1 h0 M5 ?5 F9 N: r5 E0 p/ u
#include <linux/types.h>
$ A& p' l- R# D0 o! {5 v2 n#include <linux/gpio.h>- C( b% y4 j2 h2 w. W7 j
#include <linux/leds.h>
7 z4 ]* M+ a9 D; G, t' T, t/ x#include <linux/platform_device.h>1 t8 V9 ?8 f) R( L
8 c1 h, v% i) b- q- m#include <asm/mach-types.h>. m- R+ q/ K6 C1 G s
#include <asm/mach/arch.h>
1 w' l" F" r6 Z1 g7 G1 ^$ _$ Q5 B7 I#include <mach/da8xx.h>- v. B# g! x5 t6 d7 P6 b! e, ^/ _
#include <mach/mux.h>, j. R: f2 U1 ^3 z, t' \' O
* \) w/ {$ x6 ^' e5 P
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 l* f: V0 R8 F7 y7 o5 l0 Z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): b% Q% j, n; O/ u/ \
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 y4 b9 v9 ~6 ^$ ]9 `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* V) @2 O, o/ x6 i n1 A0 o7 O( X" L
; C# z3 {0 q* |9 G3 j/* assign the tl som board LED-GPIOs*/* H/ D! O( }4 ]1 S% S+ P5 z
static const short da850_evm_tl_user_led_pins[] = {; {, L$ q0 h/ K/ n3 o. |
/* These pins are definition at <mach/mux.h> file */
9 ?/ U- w: l- f# F" t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- @3 y5 U0 t7 K1 }* o/ t -13 _ [: t$ m( G3 {; H6 i2 e
};; `( ?$ H# T$ d* N% n; V4 m
) K# S/ }" e' Z2 `" sstatic struct gpio_led da850_evm_tl_leds[] = {
) j9 E% h' B2 Z! l: d% ]4 X {
% j: Q* X8 j! o4 |4 l .active_low = 0,) z6 ~. X5 B7 V3 s" N/ W
.gpio = DA850_USER_LED0,
& I, S7 |' `' [6 C1 }4 e .name = "user_led0",7 x5 n' B& J% p# T
.default_trigger = "default-on",
: h5 |7 f; F6 P3 Z( w8 O5 H },
/ v9 `/ c4 ^9 `! X1 |* [+ W6 w {8 E6 e) {0 t& @" B
.active_low = 0,
2 ~" U1 [3 |. W r( T* t0 C .gpio = DA850_USER_LED1,
F7 W3 M8 t: m" O. [1 H1 `" s .name = "user_led1",; T# }1 |2 G: a4 s& C8 _
.default_trigger = "default-on",# v; ] O# Y8 @) w- p
},
& O/ c1 k8 c% ~9 r x \' M {
& P$ v1 ^9 d3 {( |. U. P u6 j .active_low = 0,
% r4 p9 O1 l7 D0 [; C .gpio = DA850_USER_LED2,
. \# f" ], C1 W u/ v t; @1 v/ y .name = "user_led2",
2 I0 b5 b: P, t; e .default_trigger = "default-on",: r) b! w& d7 f6 g0 O
},
+ D; O+ _+ p C' Y- T {1 j; h4 a+ p7 f( m& Y' h) O. Z8 z
.active_low = 0,
$ v7 s" w7 {- c6 a9 l) p2 K2 K .gpio = DA850_USER_LED3,
: a2 F, V& c4 b .name = "user_led3",
; X5 u9 f/ \. {+ } Y/ C/ q* i6 f .default_trigger = "default-on",
( G9 B1 L0 r. {! ?2 ` },* A7 W" g7 [$ Y3 E
};
8 b/ X! D' K! F0 P) G5 Z5 X6 m& r" X# G" ~; k' i
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# R$ N7 n- M8 K6 n F* T# o
.leds = da850_evm_tl_leds,3 t K# Q" Y- b# A3 y& T+ J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ X' i+ X' F) V- D- j
};7 @* y0 d9 r; Y0 C! ~7 U
9 P3 g4 w" j- |, l5 E+ Lstatic void led_dev_release(struct device *dev)" u2 X- q% M* C( f* p& W
{+ ?& I1 X+ V5 J
};3 _' Q: }) l# a5 h0 L- E7 W
Y- A! T9 }# L* s B. astatic struct platform_device da850_evm_tl_leds_device = {9 N! Z' k: ?5 r$ P4 U7 o* a
.name = "leds-gpio",4 a9 y: J; e0 \( ?8 M
.id = 1,- f/ F* A( R" q5 f) e
.dev = {5 Z' G* D* W5 \0 t2 l; ~& t
.platform_data = &da850_evm_tl_leds_pdata,/ c% a5 q3 y {% N3 p+ ~0 @% {
.release = led_dev_release,
! D1 i6 ^7 ~0 r7 l3 C3 i }' p* L1 R6 P) P7 m( |5 k; X7 u
};
! e" {! ?" X2 F% v/ o8 s! }- ?% ^" s$ j4 e) X
static int __init led_platform_init(void)
- Z! ]* \3 Z, D7 z4 ]2 V{8 z" p8 Q4 i; q6 `- X
int ret;
3 ] x+ s; Q, [+ w6 I#if 0
; s+ b( _4 k) j/ n2 H6 q) I; ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; A; v( ~* ^* }: u6 \+ O( L1 `; _
if (ret)9 N2 \! m" z: u$ d3 e9 I
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( z) H* [& [5 h3 s9 @
"%d\n", ret); a' O9 t2 N0 W+ V5 o, j; v8 \) A
#endif
, ?, l2 I+ a5 \" H, Z6 `" E3 w. R ret = platform_device_register(&da850_evm_tl_leds_device);& X2 H4 U$ a K5 r9 j1 M
if (ret)2 l2 J' F" l& }3 F( x6 y
pr_warning("Could not register som GPIO expander LEDS");+ J( X0 }# @" z, m# {; r
else
6 X" {6 {( @" z- ~7 G5 ^ printk(KERN_INFO "LED register sucessful!\n");
4 u" E! z# U1 ~5 W1 s, ^8 X: t& U* M6 L- U6 f( q
return ret;
+ ]) T# m/ K+ A3 _5 J; @" N4 P( x}4 @) k3 E* f- \- ` J }
' m' D* @( M% f, H/ }9 |0 P* ] Gstatic void __exit led_platform_exit(void)
; U5 h# f4 f6 r2 q' |( J1 B1 w{6 y2 I( u3 y0 w @ f- q
platform_device_unregister(&da850_evm_tl_leds_device);) E8 t% V: `. H/ S0 z2 f8 I4 R
. v( c/ e' b% J! Z printk(KERN_INFO "LED unregister!\n");
) b e. z4 |0 ?( q}* t( O$ k/ v' b
) M+ K# |( e8 x9 n. V
module_init(led_platform_init);
v$ ^$ \8 x4 ~3 I+ c8 P+ K* x B! B2 Vmodule_exit(led_platform_exit);" I# I5 y w% H; F0 ^
7 m$ ?4 V+ Z* q. D; d8 xMODULE_DESCRIPTION("Led platform driver");
# Q3 N9 ^, \3 I0 F& oMODULE_AUTHOR("Tronlong");$ m+ H$ M1 Y4 ~ R! a. ]3 ?
MODULE_LICENSE("GPL");
. X6 L5 H. a. g- n6 U: q6 Y$ u V0 U& \% b X
|
|