|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ h# P% I2 C/ ~9 ]" v4 q
#include <linux/init.h>4 B: I- V6 b& y1 j7 a
#include <linux/module.h>
Z# `, W) I. K5 q. f1 X$ f. ]! ]2 q#include <linux/kernel.h>6 I) i/ p I& M4 u$ j U- j
#include <linux/types.h>+ H) I" h0 t! ~+ T
#include <linux/gpio.h>* E, }7 A0 } n3 I; s
#include <linux/leds.h>5 Q" G6 S0 Y6 ?" F
#include <linux/platform_device.h>7 L- a. Y1 o1 e& i
. W* _& N. a. ]& C# N#include <asm/mach-types.h>
0 z2 J. G( a# M: x7 Y+ W+ m2 g0 Q#include <asm/mach/arch.h> Y* }4 L: ]& U# m
#include <mach/da8xx.h>
, g4 c5 ]# e; X9 t1 B* Y% v1 W#include <mach/mux.h>
' K1 ?: b+ ?( T; H7 X+ n: w: @3 X8 O: t1 j% E: B4 o; R
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 {$ U" I2 C' P. d4 {. v#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 z7 k7 x1 r3 w' b Q+ p& I8 Y- l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 J; l$ H u. b" W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* a% o2 |2 g5 N8 ?5 d+ k5 ~
# T6 c0 |- {. d+ E3 Y2 ^
/* assign the tl som board LED-GPIOs*/
0 ?% }7 K2 T. O! |% Kstatic const short da850_evm_tl_user_led_pins[] = {
/ w: s5 |4 ^/ \$ o8 | /* These pins are definition at <mach/mux.h> file */6 N" p# M% | S4 A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- O+ C9 U7 E% o* N -1( t6 Q: O# f9 a! }+ H
};7 L `4 S- C1 a n
/ U- v3 f- `1 P/ T" D4 Gstatic struct gpio_led da850_evm_tl_leds[] = {
0 ~9 w2 \3 Y2 \$ C% C" s {4 ~8 }' _6 e6 U7 r2 _
.active_low = 0,
* c8 W" J4 }' _4 U: M5 D. g .gpio = DA850_USER_LED0,& X9 i f6 N8 P- [
.name = "user_led0",7 E; ]# g2 G, A" s! \
.default_trigger = "default-on",
_2 b* g3 _- d },
$ k C6 w! o5 v4 N0 l1 m {) H0 P k9 w% I$ @
.active_low = 0,
# F$ P: B! _# B; s$ Y& m .gpio = DA850_USER_LED1,* m2 |0 M0 x# S4 r, T
.name = "user_led1",
F ~9 x- \% L6 j1 x; c2 j8 \$ E .default_trigger = "default-on",
^* j% X* `0 M* Z+ b },
+ i+ o" ]+ y+ K7 |! o {
' x; K3 h7 \) P+ f9 }% D .active_low = 0,& @& s9 @ v" s% w6 A' H
.gpio = DA850_USER_LED2,
3 K9 T2 l2 K; e* F, T; g .name = "user_led2",
# n' {( m8 o* O3 U0 |9 x .default_trigger = "default-on",# Q- H% D4 V( _6 q0 W# r
},2 z) Q) }/ V8 g2 X( c+ w4 [) L, D- v
{
7 W g ~6 [* ]" \7 ?' { .active_low = 0,
4 J# o% |& A7 p5 |" W( P/ [ .gpio = DA850_USER_LED3,' B+ {) _8 f8 T. K L' T9 l
.name = "user_led3",
! F1 W$ d, T" Y .default_trigger = "default-on",
# ]/ ~, A- q# V* ?: x# y; P },
! J. K; W$ t! O* V) M1 a};
- L/ x2 L8 P" t5 r& x5 L+ N. I
' x! d y7 e1 X# n1 m, Zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. [) U" V$ ]9 Y3 g$ a5 K0 M .leds = da850_evm_tl_leds,
~3 n0 W+ c5 N0 k& j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) X/ P! V/ o, K5 U) k};
* r0 H' y% B: O8 z
* G) p e+ y& [, H9 zstatic void led_dev_release(struct device *dev)
$ C+ f' N" Y6 V! J0 G+ ~% M" x4 H8 x{! Q% D4 [/ {' ]$ `
};
7 V7 I# a' k7 p' V6 ^7 u8 Y1 C8 ?
9 |% @ C0 c8 M/ p( @) l6 M/ V* Qstatic struct platform_device da850_evm_tl_leds_device = {$ X, g8 [8 Z t5 L
.name = "leds-gpio",0 G* f5 u0 o, f/ R t2 G
.id = 1,
" h5 y1 U; Q/ O+ j: M4 P( f% S) \2 | .dev = {
4 [/ c+ f" p4 S8 W, l0 k .platform_data = &da850_evm_tl_leds_pdata,- i5 p6 W7 K; G
.release = led_dev_release,
: e! B4 W7 `6 b& e- C) U }
0 @ J9 e- g) _# w2 I; s};
* }6 F" K; H) q* v; H
# V) g3 h! L Kstatic int __init led_platform_init(void)+ s6 }0 ^& I. i* G. k
{, ?7 ]& `5 r5 ^/ \$ s# C+ u9 e; X
int ret;
7 g. a4 [7 Y$ y' H0 x2 S#if 06 l6 w$ x, E' h# Z% |! D" t" c* P
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) c2 Y: i6 x7 U" G& v
if (ret)
6 O/ d1 T. K& _ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* V) u: g! n- G# h2 S
"%d\n", ret);) W# G% {# U1 P Y
#endif0 |; T! f7 P+ M; B, z
ret = platform_device_register(&da850_evm_tl_leds_device);! z/ D' Y) l2 @1 `, Q
if (ret)
# A7 H- q9 [% l8 ~+ }3 }/ c% ~# h pr_warning("Could not register som GPIO expander LEDS");! y; k; r9 J1 D6 C7 B0 ~5 R
else8 |4 a5 \4 h8 n0 ]% C5 A2 E( n
printk(KERN_INFO "LED register sucessful!\n");' Q, b ?/ |! F% x' [" N+ j
1 R( E7 I+ {4 \: B% P! o return ret;
2 B& q- c6 n( n9 ~9 T}
. A- x, R# u3 l: W0 {5 L1 d! j7 E4 L# [: q' ^. F
static void __exit led_platform_exit(void): Y4 ^/ e! ~7 H6 O* X f# o
{% F0 Q) q# p* O' k+ P( X" n5 a
platform_device_unregister(&da850_evm_tl_leds_device);+ H' o- O7 S+ Y, y2 ~: N
( t1 W: b; j! r; w' E* r1 D: y printk(KERN_INFO "LED unregister!\n");
( T: s/ I0 `" _}1 \- d! {' b: a4 ^9 Z
) n- I. M3 _/ k( I& C, Nmodule_init(led_platform_init);$ V d0 i& y. q3 v& \+ K5 K4 Z. m
module_exit(led_platform_exit);4 d: k1 e$ y+ \4 F( \
: V# k1 w% q( {8 K/ Z8 a
MODULE_DESCRIPTION("Led platform driver");
M! K5 D7 |) }( jMODULE_AUTHOR("Tronlong");2 L: r- e! }4 u# J1 Y
MODULE_LICENSE("GPL");
7 O3 f% a* F4 m0 \( S# `2 U' e
& B3 C5 t V7 J/ W; e |
|