|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, |* t; c! R5 c+ ~. y4 r
#include <linux/init.h>
! X& D2 ?1 v0 f#include <linux/module.h>
! J# {/ n9 o- q% w. K: [8 |5 \#include <linux/kernel.h>7 ]4 W, t" ]7 M+ b1 P g3 @
#include <linux/types.h>/ u; }$ [& d2 v$ k# S( a" d
#include <linux/gpio.h>; T5 H( V1 {) W9 I3 ?! x
#include <linux/leds.h>
9 p; s* L5 @+ p8 `! \7 T# y#include <linux/platform_device.h> ^3 p2 y. `( P+ Y
! u, R* e0 x! ~9 ]; B- ? z
#include <asm/mach-types.h>
4 Z& G3 k8 s4 M0 I2 h, x5 d#include <asm/mach/arch.h>
$ ~, h5 {. y! h#include <mach/da8xx.h>% d0 w: _0 J) r( x+ M' \* N
#include <mach/mux.h>
6 s) L# t& ]2 b/ K3 n1 F
1 g; Z' Y/ }7 a7 }; k! X- g#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 Q, Z# q( }8 p; b3 u$ h" t; c
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 p" Q$ X1 \1 [, L: e z* Y1 g#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 x8 c/ F& l: [+ x* U#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 q, T1 M$ w- n
0 q# G" A, S2 m' @/ d9 m
/* assign the tl som board LED-GPIOs*/! Y: w% s( i! |1 F! z! E
static const short da850_evm_tl_user_led_pins[] = {9 g+ }. G) z+ _: x- Y) ^4 Y
/* These pins are definition at <mach/mux.h> file */) W& _5 x% m8 N- m- u1 P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, x# K P6 h0 m# _" K: x# K3 r
-1
Z* s. k1 a( o};" j& D1 ?( P3 }6 g" m: T3 _9 ~
; o0 ?% Q2 N9 d# a3 t& q; I* B
static struct gpio_led da850_evm_tl_leds[] = {. j& X4 a5 v- ^* O- j/ [+ {4 f
{6 W: Q* o7 c1 _) F: T
.active_low = 0,
5 O$ ?4 s: h5 G .gpio = DA850_USER_LED0,
+ c5 R! m% c6 p) s2 D .name = "user_led0"," z8 S9 W k+ B" t5 o
.default_trigger = "default-on",6 W( C) w8 v. j$ t. |5 u! Z
},
( x7 X9 V4 c5 f7 R { @2 e& X- ?. j! d
.active_low = 0,
* o0 W2 k; I& a* @3 z! N7 P .gpio = DA850_USER_LED1,
5 J+ ~0 D J! h/ d# w) b9 I4 D ^ .name = "user_led1",
; I+ A2 q$ i* N* `9 D( ^ .default_trigger = "default-on",
1 i, H6 r/ i9 O5 K/ m2 T5 Y. H },
* L: J* N' r& y/ g3 v8 g5 j {) X3 q5 [8 @ A0 M+ C: r
.active_low = 0,
5 E- K, u$ J: z) Y; x7 y$ h .gpio = DA850_USER_LED2," C2 P% G7 v5 i" Q& M
.name = "user_led2",7 D |! B E& m9 s
.default_trigger = "default-on",
/ B N3 d0 n7 U6 T },2 ?; M% _, G" r g+ _$ V: g
{
3 |% c3 J1 o j: X# N .active_low = 0,
( h& h) M5 M0 [+ H) s! S. ~ .gpio = DA850_USER_LED3,8 J: M) O9 R, f7 m; |% L% ~
.name = "user_led3",
. e6 u, e3 N2 D .default_trigger = "default-on",- w8 P5 ?. ?/ a& K/ W& c5 x* d* v5 a
}, b2 i' b: d$ U5 `8 G
};* s+ J8 S0 G" `
/ L; G |$ U- }- v" y2 j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 L/ z8 K; C- |: l
.leds = da850_evm_tl_leds,( b9 P/ V, [% B- h. {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# p( X; z- i: Y2 c8 f
};. t' C$ i2 l6 x9 H) n Y# F4 d
$ h$ d5 S, e& R1 x q3 s; J
static void led_dev_release(struct device *dev)2 X* J. W. P* A5 ^4 d
{
" \' a4 m4 V2 ^$ e7 [0 ~};
- Z# z2 B& s! Q7 k2 B2 b" @) L" _, @
static struct platform_device da850_evm_tl_leds_device = {
5 K" ^6 w! t, d4 q$ p: ` .name = "leds-gpio",) t5 _' ^6 h: k2 L
.id = 1,5 s6 K9 |8 O9 f" k
.dev = {/ Z+ _8 T3 m8 n4 ?1 z3 }- L
.platform_data = &da850_evm_tl_leds_pdata,/ s8 x+ ]% W: s, E0 |# B
.release = led_dev_release,
# v I! S* ?$ u# F }; n$ D0 ~9 p8 ?! R; e) ~
};
$ D$ z5 P) f' U; T" I0 A8 Y5 P& l+ ~' ~; D
, Y5 T; C% F& K3 J1 y, Pstatic int __init led_platform_init(void)3 ^4 ~) f# d! s
{* {9 s/ ~' J2 l) B
int ret;( Y$ }3 M0 f0 ^' K2 N5 ~+ O( G3 I
#if 0
' m" v) R) m3 ?/ I S* L) D7 I; g& I5 i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' i( n9 ]6 [2 M7 b( }/ z! V: g
if (ret)+ Z5 r4 \3 h# T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 k9 [0 V3 `4 j2 g% l "%d\n", ret);7 t$ B4 L R+ B
#endif
3 W5 E: r9 |' \5 {3 q$ ? ret = platform_device_register(&da850_evm_tl_leds_device);
1 E2 X/ X0 \$ q) |' p' a if (ret)
R, l0 l# e, ]- k C9 b" a# ] pr_warning("Could not register som GPIO expander LEDS");
8 k3 X: D( Y8 Z% G! |" R# U else5 p4 ^3 Y q$ V$ Q+ j8 s% v" ^
printk(KERN_INFO "LED register sucessful!\n");
: R& {2 ]! }! _; F! W! r1 T1 L8 J) C5 _, }, s: O. q
return ret;
* b- H6 K/ R5 S# z4 }}" n2 s, ?& O4 u0 [' U; h9 r1 @
; Q8 G' \1 B+ l( C( Qstatic void __exit led_platform_exit(void)
" ~4 I2 G, g" B% u) n/ M{
7 P$ d$ q6 z& o. g, v platform_device_unregister(&da850_evm_tl_leds_device);
8 Q5 }9 A# Z0 p( F9 ~( M+ l: d- v$ ?% j2 |/ B
printk(KERN_INFO "LED unregister!\n");
# ^4 r4 \$ e: X9 J7 o}# |6 W u- F) {$ M
! u& M" j: q: Z7 _module_init(led_platform_init);* i8 O9 e& y0 S% D2 R6 Z
module_exit(led_platform_exit);
, H, Y4 N+ e: u U I% {% q) h. B- N5 `7 h- H
MODULE_DESCRIPTION("Led platform driver");
2 v5 i/ E: R) G1 i4 d. s7 C ^MODULE_AUTHOR("Tronlong");
" p% K, p% q) V) {/ _* [MODULE_LICENSE("GPL");
1 m4 Z# W5 z! l3 ?+ T6 p6 U% G2 l! J* O; \3 Y, r' Z& G
|
|