|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 P8 D( J! K# F; q4 d
#include <linux/init.h>; [0 R l1 H5 o/ z8 P! ?$ g
#include <linux/module.h>
y8 w' [$ H) j4 c; p#include <linux/kernel.h>! h5 F/ u0 h8 E# O
#include <linux/types.h>
3 E) m; }3 f" n) e#include <linux/gpio.h>
9 Q9 Y4 P+ y. R1 x' E( B#include <linux/leds.h>
+ v B: U1 T) G& S#include <linux/platform_device.h>* c. m2 Y# G7 @1 D, Z! z
$ Y& ?$ V& q0 I# Q
#include <asm/mach-types.h># N2 x; V% L @, `+ l
#include <asm/mach/arch.h>
7 e5 q6 j) x6 r; A: P$ x+ U#include <mach/da8xx.h> k* f, `5 W9 A
#include <mach/mux.h>
2 U, W7 U+ E# q; |- o8 h" \' `/ W
9 ]9 E5 [8 D8 `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) y4 n( {, d, {. @: U4 u- m1 }2 p
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 `3 a; o, |$ J% w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ H1 k: ~' ?' e, f( X+ q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ f5 V. f) E8 L5 w' m4 w4 U/ K% \+ S% R! k
/* assign the tl som board LED-GPIOs*/8 [3 R- V& S2 [0 `; v
static const short da850_evm_tl_user_led_pins[] = {
. I( _9 N7 R# A; a% M4 s' |& | /* These pins are definition at <mach/mux.h> file */# g- ^9 c7 o8 `, T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 Q% O. T! g, M! X, v4 e3 `0 F -1/ z( F, u' A6 Z
};2 Z m1 N2 f1 \0 L5 x% q' m
$ N& H" y, e" \8 ?) A
static struct gpio_led da850_evm_tl_leds[] = {
) {2 Z5 D, y e/ F {
; N+ F$ i' f* e, a6 N .active_low = 0,- O# z V4 R. B
.gpio = DA850_USER_LED0,0 Q, \+ u# H+ |- K+ f( K0 ~
.name = "user_led0",/ c( o0 f7 O: b$ n+ {1 X {. D
.default_trigger = "default-on",
7 `1 B% o6 P! \6 z+ I1 u% c. U },9 c$ ^% {6 f9 [$ c( `& W
{
0 e3 A/ E( G) R+ s# \+ d, S .active_low = 0,
; d$ g$ [# W+ D ]4 f .gpio = DA850_USER_LED1,
2 K; C2 u. O0 {" N, t .name = "user_led1",6 u6 k) f+ p, [$ j
.default_trigger = "default-on",+ p- T9 ~' v8 F; e0 F: g) n5 r7 Y
},1 W- \5 V% D9 l( o
{
2 E; c* T; l4 f- j .active_low = 0,& |4 h0 M6 ?; X) b4 d
.gpio = DA850_USER_LED2,* N3 B4 W; B. W2 e! q
.name = "user_led2",
7 s( D- q3 @7 q5 o: ?: _ .default_trigger = "default-on",) T9 H9 z8 R9 {
},
3 j0 k; z) [- O4 I {
% w g. C; Q% [! Z .active_low = 0,
3 B, k4 k4 {2 |8 f9 ?2 f .gpio = DA850_USER_LED3,, o8 s8 t" ?' L9 h8 \
.name = "user_led3",9 y/ p4 f4 ?# g5 i q
.default_trigger = "default-on",
" \# F- D3 w: Q# E$ X: Z },
4 S4 P+ C1 g& I7 }};. ] }8 S5 K, j# A
0 n& I% w- F. j: R* \/ L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. h! h; o0 N! T" o1 c8 v
.leds = da850_evm_tl_leds,
6 i, p0 R4 ^) @" p .num_leds = ARRAY_SIZE(da850_evm_tl_leds), w: K- B0 P1 s+ g& c! y
};5 b7 m$ d& L' z# |* G* z# _6 D
* C/ t' h+ U1 w4 J3 Ustatic void led_dev_release(struct device *dev)/ J/ _' j: R4 q
{8 f- j; x; J' g% {: H0 X* Y
};
6 O/ Z! ?2 U" K% R) K$ F
; O% ~' D9 D! {' u7 {0 `static struct platform_device da850_evm_tl_leds_device = {
6 D+ ~4 U9 ]- p6 K( k- i .name = "leds-gpio",1 S S S! G1 @& A0 X0 p: i
.id = 1,
! r* y2 q# G6 ]4 r2 N .dev = {8 P2 J U2 h2 r$ s# H* Q" `
.platform_data = &da850_evm_tl_leds_pdata,* g% [: v5 H" M/ U5 k& i
.release = led_dev_release,
- I7 j. f( Z% P; h. q) b; W }
' T$ l1 w$ B% l3 S# G6 Z};
% C+ I: I. f/ }$ }- S Z" L
9 \# T0 ?& U) |, K5 {3 Pstatic int __init led_platform_init(void)
" F4 D2 ]+ h# v9 Z4 I* v{* S" @" f/ W5 g
int ret;0 n; |0 R* W8 X# K& S
#if 0
8 O5 u9 V8 M6 c3 u! k: D" x) a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( T4 ^1 U# I2 x" c if (ret)
0 [# M9 \5 z* M/ K" d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 L! w7 C( \) X# @9 k$ |3 F' p1 `
"%d\n", ret);$ Y, X! v5 j1 ~! D9 _8 x
#endif
4 X7 _, C9 W7 l# k- N ret = platform_device_register(&da850_evm_tl_leds_device);
0 c/ K2 \+ q O6 E; g if (ret)0 [0 R, A- s- D3 B5 M) [7 P2 i4 m/ @
pr_warning("Could not register som GPIO expander LEDS");
0 V9 ?+ I {& k6 T: J else
1 c8 D- S0 D* a# }: E- h. x printk(KERN_INFO "LED register sucessful!\n");
" l2 W+ O. b7 ]- z
( |& S% p- ?3 d4 Y" {% @ return ret;( {7 X# F; ?2 V# J+ g
}
7 ^7 y' J# Q$ D& t# p8 j0 w B! ^+ ^4 m' m
static void __exit led_platform_exit(void)/ \% o/ W( G* @) P4 Z1 l
{2 ]4 I7 k: n8 {- w
platform_device_unregister(&da850_evm_tl_leds_device);
/ l: |3 I9 v+ f, {! a- q6 Z4 p7 K6 O% Q9 z
printk(KERN_INFO "LED unregister!\n");8 _: }! R r+ U* }3 ~9 l3 r6 ]3 X
}2 O7 G8 `: t* ~
) A J: t# z8 ?6 r. G; s
module_init(led_platform_init);
. B/ r9 B, d3 |% g- F+ |9 Imodule_exit(led_platform_exit);
" t: m" U% c; V) T9 \. U0 F. ^ K+ A6 v* [2 ^/ Y
MODULE_DESCRIPTION("Led platform driver");
- {+ r8 W. t' e, i* r# YMODULE_AUTHOR("Tronlong");
9 z7 Q3 X# W" A9 n& NMODULE_LICENSE("GPL");
( x- z8 h- x; ] p4 Y
; p! U0 y4 f7 U$ } ?% L8 { |
|