|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! [7 Z$ s$ g* g/ e! i
#include <linux/init.h>
+ D6 d# S2 ?# l6 Y% u( k3 V#include <linux/module.h>
+ }3 h" I6 a4 @( _& O4 {#include <linux/kernel.h>
* b/ g0 u n4 D+ t8 h* |. [#include <linux/types.h>
2 J7 H+ ]& u/ J) y4 }+ B* a% }#include <linux/gpio.h>* `0 u$ G+ {- k" L
#include <linux/leds.h>, |6 ?" i% W# R% M) ^0 @
#include <linux/platform_device.h>
. K8 L! n4 F) d( \: w/ N0 z
2 l/ Z" {$ z/ x' I#include <asm/mach-types.h>2 K4 A5 ~( ?/ u+ v/ F Y
#include <asm/mach/arch.h>
4 j$ v& `) x+ z' P, l' L#include <mach/da8xx.h>+ W' G+ S. _, _, @* ]0 b5 m
#include <mach/mux.h> U. M$ ]+ J4 [4 Q5 I5 i, `
) b4 W6 E3 ?& Z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 U: C1 m# b* }6 m; c0 G% e& C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 A+ d: C$ v6 u; N; |
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) y6 j5 h s ], ?0 v2 M% m8 d5 x/ b
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' g* h, K8 `6 G' ?- q0 c, ?8 H* C5 i8 {- s( g1 O
/* assign the tl som board LED-GPIOs*/
% b$ a8 p9 @8 D& w, B4 Dstatic const short da850_evm_tl_user_led_pins[] = {
& t& L6 G9 `, Q; x. d/ B8 X* C /* These pins are definition at <mach/mux.h> file */$ w9 a0 W8 c) l) }$ P M
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 l7 B/ z" I: p1 D -1 u8 B3 h3 o3 }
};
|& u) V* D$ x! Z9 B- S2 }) n! o) T+ Y; L8 }# Y3 h' y; E& v1 J
static struct gpio_led da850_evm_tl_leds[] = {1 q4 A: o' L0 i5 x/ H; S/ n
{; |, X, p! _4 A) y1 F+ Y
.active_low = 0,& A. R- o& \5 v% l0 v7 J7 s+ W
.gpio = DA850_USER_LED0,
" M; h( x: |0 [/ T& J; _ .name = "user_led0",5 ?$ i( X! ~( m0 y. J
.default_trigger = "default-on",
- H' x# ^/ C/ x' n% _! |) U' a },# {( O" _% O! k3 g* K# n
{
! o& R) _' i" j- m& A) }' U .active_low = 0,9 K' J" |4 A( B, h8 U, G+ p
.gpio = DA850_USER_LED1,
; p0 X; W+ {6 z0 u' K; t .name = "user_led1",
$ h* E- V- h& w2 k1 o0 [. z .default_trigger = "default-on",: F- T( M6 D. \; X
},$ e4 g' }8 F3 H# @- f
{3 y# A/ E* S. L) i) z& [
.active_low = 0,4 i4 \" J/ n" C# d- @: z" y: d
.gpio = DA850_USER_LED2,
* t& o3 a$ D c .name = "user_led2",
# v, y9 N, T; A. {: Q1 F .default_trigger = "default-on",
! Y. B! a+ ?" {7 Q: Y" m4 p },1 ?$ b! n( ^- Y( ?
{! { ^; s* [2 r5 z$ p
.active_low = 0,
5 }$ p- H( O7 A( w .gpio = DA850_USER_LED3,
8 y# m: X* G1 o$ L9 M .name = "user_led3",) k1 I7 P) ?; x0 @9 |: q5 y
.default_trigger = "default-on",
; Q# p! z# E3 y1 y5 U },
; z. g! h5 m1 w3 P4 L" y7 O};9 t9 h" v- p. [* n9 i2 E
* Y f- D; W0 F5 b6 v8 Q c
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 Q( \, b: [$ \0 B8 f
.leds = da850_evm_tl_leds,- G" k. J- t$ C- o$ a A' G* V# X
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; v$ s; Z! u: P" ^/ A$ E
};' `& ?- G& s: d, _# ]+ Q0 H
7 I5 ~( o. t5 F: F$ W6 D$ Rstatic void led_dev_release(struct device *dev). ?- a0 U' V B* ~6 n
{
$ j8 Y/ p9 o/ i# Q/ [};
, e/ c1 g2 M2 b1 V; `- A7 Y7 T4 t* d9 O- o! @
static struct platform_device da850_evm_tl_leds_device = {6 R: ~* ^& f9 U4 j
.name = "leds-gpio",
, Q- f' Y! Z0 h* n .id = 1,
4 t( _ o/ P, a" u- ? .dev = {9 U, W. H, S$ e
.platform_data = &da850_evm_tl_leds_pdata,: w0 g/ S, n" p1 A1 ~
.release = led_dev_release,' E& C) ^" g+ M& ?- ~3 v
}/ d# I, u+ x/ p( D
};2 N: f' V# O. J0 k
. s; k% l/ V' s& h7 @
static int __init led_platform_init(void)& y& _! w- V: o: y
{8 i U1 k4 B) U0 U+ X
int ret;" g1 F9 A- ]8 m1 A
#if 0: N- v4 L" E, s8 p- C0 a. t
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 D8 r4 v4 v3 D, n: j6 _1 H
if (ret)
7 R, w O. V, a2 N3 w pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ Z& c$ G. ]+ f
"%d\n", ret);8 }+ t: y, d; I; J4 T
#endif
4 m$ B% K$ u" C. x; h8 z ret = platform_device_register(&da850_evm_tl_leds_device);
3 W# |7 A2 b1 r: H* v/ H' P% J if (ret)
! R* Q" i' H% D5 |# N3 n/ v, C pr_warning("Could not register som GPIO expander LEDS");' z9 ^# r: G0 `1 W
else
3 ]6 `) L. w) o& I printk(KERN_INFO "LED register sucessful!\n");+ r- ^+ E, w6 t3 W/ E- s
7 d7 v/ y7 g$ t
return ret;; U$ M3 f; H; d8 D" C4 X7 E
}
3 U# M/ [5 o, L. U' C: u
- s7 h& |% z H3 V5 I% _# d9 rstatic void __exit led_platform_exit(void)
, }% {% Q- l F9 W# U{$ o1 B% H- a* E- X, N, B# Y1 \
platform_device_unregister(&da850_evm_tl_leds_device);
. z, X& o2 o+ D: `7 |: g4 V6 ^4 [+ z) i2 V4 Y
printk(KERN_INFO "LED unregister!\n");4 M! K+ R5 T) [+ B. Y5 L3 H5 N) L! ]
}: [; a$ d% r9 g. |# G) ~
+ R! `, X; [! k1 R
module_init(led_platform_init);
" n6 O& L/ V+ [' Amodule_exit(led_platform_exit);
' n) `' L0 V! U8 S5 R9 X/ I6 l$ q2 M* H" C; [1 @, O$ k; N
MODULE_DESCRIPTION("Led platform driver");
% X" x' g9 k$ Q8 _- eMODULE_AUTHOR("Tronlong");
3 G$ U& L9 F; q' O; S) aMODULE_LICENSE("GPL");
! |! R7 }' h8 d$ k, a
2 L( R; N4 k. d" d i |
|