|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; B6 ?7 J! q1 s5 N9 _& G8 x) p4 ]! u! Q
#include <linux/init.h>5 v, C* f$ A3 ^' f
#include <linux/module.h>& [2 L/ Q. V: u. K( y( N
#include <linux/kernel.h>1 V) p. ^1 X) A
#include <linux/types.h>
1 K# w- }3 s/ y* M6 T#include <linux/gpio.h>
& \& L. R s# t! [# y' i" {#include <linux/leds.h>
1 s5 d! f( B. [/ D# `; [0 ]#include <linux/platform_device.h>5 W6 n5 ^ n0 }6 o5 d0 n
. H3 Z# y, R# i- J, ~#include <asm/mach-types.h>
0 d- h9 `7 D& ^ P#include <asm/mach/arch.h>
4 y, n$ K6 r2 P8 j* c#include <mach/da8xx.h>9 a7 Q* a# E- z3 K7 [
#include <mach/mux.h>) I/ p$ i G. o, K2 p
# I3 W- L0 }; z# V/ D#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! X& E) f5 S# G( K5 p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 G8 F! [7 N6 R) s& J( ~9 G#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 Z: m: g" u! W/ f& X#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 r' h% t6 }% T; M% @
7 R. E' Y% d5 w/* assign the tl som board LED-GPIOs*// U& S- T0 k2 f- M$ H [. n. O
static const short da850_evm_tl_user_led_pins[] = {; d. c1 a- B' n/ X; x- v: O
/* These pins are definition at <mach/mux.h> file */
* y9 e7 C* `, b o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& N, a7 X$ `0 G' e8 u
-1( e) y" o9 I' U% T( }8 u( {% a
};& Q# o8 a }' }4 \' L
* ?' q. z5 I: p$ sstatic struct gpio_led da850_evm_tl_leds[] = {4 N) r3 @) L* S/ k# Y- u( [
{5 I; ?7 c! h6 M1 u
.active_low = 0,1 Q; e! h) Q# Z- W& H( F
.gpio = DA850_USER_LED0,4 P+ M B" _( k% s, G
.name = "user_led0",
0 k) a7 o/ }% L5 \ .default_trigger = "default-on",
/ s# C0 R# @- v% o% U6 N },
; |, l; U0 P e {3 V8 y6 r7 U( ?1 b% B
.active_low = 0,4 ]; |; E& [& o2 j0 d1 ^4 x/ J ]% l
.gpio = DA850_USER_LED1,9 v4 J1 X, R; m: k. ?$ T
.name = "user_led1",
: {- F) `4 M0 u. y1 f6 ] .default_trigger = "default-on",4 W6 z2 L$ k4 O" K) X. o9 h8 \ L% H
},
1 n/ T0 }3 A2 n2 X$ [ {! _! F& H% q4 o5 v! f* f3 H T
.active_low = 0,
- H E9 c- j9 t5 z .gpio = DA850_USER_LED2,% N" r5 U- p2 S3 X- M
.name = "user_led2",5 M5 E7 f( ~5 r* G
.default_trigger = "default-on",) F2 P: I% W$ v2 ~3 J- {. r
}," V; U" _3 @' C r+ V. l: l
{ q8 Z$ P( M/ A% W; n
.active_low = 0,; o5 h9 [8 l C* @2 Z0 V/ w; l
.gpio = DA850_USER_LED3,
: t9 Z$ a, [% a- J8 U$ t .name = "user_led3",
4 E2 @/ i6 q& w+ c2 \" s .default_trigger = "default-on",( h1 C/ A; r! h3 u4 t2 L
},0 b* ~8 A! s1 l& z* R9 S
};- c: F2 [' a Z/ z! b( }
4 r9 m* T: c: e5 i! d9 n
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 \$ c! t* T3 F$ G. }3 l+ Y6 ^ .leds = da850_evm_tl_leds,- J/ f; N% ?: o
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ O( U$ C* R6 V) r5 z7 {. v6 \% F};) ]5 s" F1 D, y# z. p8 w0 s+ E m
/ C9 T4 ~) W3 g# ~7 F
static void led_dev_release(struct device *dev)
, K: J+ |6 {0 K: x, I/ b{1 Q& {! l, V0 s7 s5 t
};
0 K& ^1 g% Y8 g9 V6 x7 T- {) [- v5 V% J3 i9 x; ]8 |2 u5 o+ B$ i8 [+ ]* e% k. ^
static struct platform_device da850_evm_tl_leds_device = {
- _8 p) F+ U6 G# d2 V" Q .name = "leds-gpio",1 [: J" H$ n M% T
.id = 1,
7 N% B( u' U, B .dev = {
, f' m" R* }7 b$ t6 @* x1 c .platform_data = &da850_evm_tl_leds_pdata,
4 ^3 Y' A! r6 j" J/ i7 J7 u) i .release = led_dev_release,% Z$ ?: @$ z( [$ d
}
7 y) U* _8 i& a: E};) i+ |1 T& o2 U- R8 e9 W/ L
o; l \+ ?0 a! i0 Zstatic int __init led_platform_init(void)7 l! ^& t4 ?% f, R5 B
{9 f! X3 W) k2 C
int ret;
4 O$ K. @2 A# S! l( L#if 0
, O8 |1 m- {% B7 M( g( m$ g ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
l8 y) S: I( X! Y5 Y4 q: Z if (ret)
7 R* C, A% q( d7 D/ o, z4 M( _ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! t, j' m! A, z5 a/ Y0 f+ l "%d\n", ret);
2 S" M: o, p5 u#endif* s/ e4 O! `3 B
ret = platform_device_register(&da850_evm_tl_leds_device);4 h U. D1 G! w( C
if (ret)$ ~/ I( w1 c# k0 A
pr_warning("Could not register som GPIO expander LEDS");
) t3 W2 X) z: d2 \) z# U3 W8 p else3 W+ }- s( y; Z O( B! I6 O
printk(KERN_INFO "LED register sucessful!\n");
; J) G. J: u% X( O1 C4 k/ T( q5 o8 A* p* X, l- e! _
return ret;. A8 D& Z1 u/ h
}9 B6 X/ K& C d. V; c
1 _) K! v0 R/ T8 o& l
static void __exit led_platform_exit(void)6 j9 {: l4 X$ j, M
{4 E- l: ~8 Q4 s! J
platform_device_unregister(&da850_evm_tl_leds_device);
3 l+ f" p+ A5 P6 l( X; H: |8 H9 t- j$ N8 \* p& f/ O0 O
printk(KERN_INFO "LED unregister!\n");# N9 x1 `' y- R
}) t9 ^+ a! {1 h7 Z4 t
! B' d- a" X7 J+ K0 @" ^module_init(led_platform_init);6 E; H1 n; V* G7 P! e H
module_exit(led_platform_exit);6 u( M9 d6 I0 v+ k9 j
3 {2 k' f- A( W' L3 B
MODULE_DESCRIPTION("Led platform driver");, T. s+ E6 M, b) I
MODULE_AUTHOR("Tronlong");8 i- L; X2 S* F& @
MODULE_LICENSE("GPL");' ^% M' U/ p* K1 q6 Q
! Q0 |, d" k+ R& a8 U
|
|