|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 k5 H/ e* J# F" ^8 o
#include <linux/init.h>
9 N& f+ M, j' R \7 a#include <linux/module.h>* l0 N0 }$ C- Z! E+ H
#include <linux/kernel.h>
1 y7 [ o7 M& q: }; ?( q1 n#include <linux/types.h>+ _. ~0 T. M3 b: }# X
#include <linux/gpio.h>
+ V/ V% g$ \' `/ @#include <linux/leds.h>' w8 |$ o; S7 u f/ s
#include <linux/platform_device.h>
* P3 K9 @; T$ n7 W, S% _- B, g# `& g/ a6 s* C/ ^* Z B9 @ ^* h
#include <asm/mach-types.h>
! B8 p8 P3 }" `#include <asm/mach/arch.h>
9 f$ z4 p/ ]' ~4 W5 b6 d1 c#include <mach/da8xx.h>
- U* [' P% [ ?1 Z; s6 S, T#include <mach/mux.h>
. U0 b( s$ ^ O5 x& F& E) k, U! }
+ x) M: U0 D: Q- ~: r3 U' Z0 W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 h2 | z( b' c, A#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& H3 |; n+ ^ Z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# I% W1 J' D, [1 p3 r/ h' A9 x#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% i: ^# ^" O0 N, j7 m
4 c$ Q8 }" `6 K/* assign the tl som board LED-GPIOs*/
4 S) ~0 p! y2 S! m7 g& qstatic const short da850_evm_tl_user_led_pins[] = {/ O- Y* N8 V- a# X, M
/* These pins are definition at <mach/mux.h> file */
) n y6 a# Z! c3 }4 C- d' {% z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, [3 ? l* h& J9 t! r2 @$ K3 M -1
3 g0 A% l: k; F: ^) m; s8 u7 L};# g" R* I; s5 Z4 E
: K# T; ?2 {5 v. Z v4 P/ l, ^static struct gpio_led da850_evm_tl_leds[] = {
) D6 f; f, A# X, a0 s {& Z" W) _1 A3 t$ f8 r) l
.active_low = 0,
0 r. W- [$ A) D- g .gpio = DA850_USER_LED0,# r7 \3 w6 H' D
.name = "user_led0",, u- @: d9 ]) J0 G2 m7 d2 t
.default_trigger = "default-on",
. x5 e# r0 M- {) {* t8 v },
+ I3 Z5 D" s$ c3 x4 B( S {
; S/ R$ v. J, J .active_low = 0,( z. j2 ?, g2 b( G
.gpio = DA850_USER_LED1," I! h2 p7 ~* X* ]) N
.name = "user_led1",
9 c: ]7 L3 s- o6 ?& _2 g7 y- Y7 l .default_trigger = "default-on",
# t0 `. H# o' y' ?- Y },+ y! s( E3 ?" E( E. q. O- d
{# Q! c& V/ ^+ h$ H' T! E
.active_low = 0,
7 \* E, E$ B2 t5 L- |* A! i .gpio = DA850_USER_LED2,* o& I: {7 J# M: D0 ~9 S
.name = "user_led2",
! E& H m$ p6 C; a/ F5 _2 P* q) A3 [ .default_trigger = "default-on",6 E6 W2 |# A7 x6 l
},
: `$ z$ L$ W4 H8 r" a a {
% T' k E$ n D .active_low = 0,
4 }( O& M$ }8 |. W+ H .gpio = DA850_USER_LED3,2 f0 q' @; Z; m4 n0 W! `9 r
.name = "user_led3",- z$ s, h9 m2 B4 x. b6 j
.default_trigger = "default-on",
% p6 E1 X; O- B F },
4 m! P& w$ q' i};4 h, H$ F" x3 e
- ^5 f' K& s0 I+ M
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 K j Z8 ?7 J .leds = da850_evm_tl_leds,: y% @; K1 S: W2 F/ |# m3 q& X: ]
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# H+ A5 M! i' @8 `1 e5 W};) X( {4 S3 Z/ F/ p
8 V2 ?1 @% h9 D' ustatic void led_dev_release(struct device *dev)) o. m( d% S- o8 o9 o: V8 } E
{
) Q3 b1 X0 ]2 C) k; B' a};$ `: v2 P0 W6 c/ d+ v2 {
4 W7 b* u. J$ J/ O; F- mstatic struct platform_device da850_evm_tl_leds_device = {1 r) r5 Q; g- m! f# G/ s8 o
.name = "leds-gpio",
3 M' J/ P" W! q' h1 L5 Q2 e .id = 1,
+ N+ |/ F7 e% ?5 Y .dev = {6 v- ]3 h$ X' V) L4 I* j/ m5 c0 h
.platform_data = &da850_evm_tl_leds_pdata,
4 P1 J& T& o; O5 U ~ .release = led_dev_release,
8 {1 R1 U P( C- w }
3 g" o, I# j* i9 w- F8 Y. b0 o};$ u. _+ m+ c: V+ l6 V! O
0 @9 @* D8 `3 Q9 bstatic int __init led_platform_init(void)
3 m6 a$ b( u4 ~' D: r: `1 E{$ M+ `7 w4 z) Y
int ret;
; X( `: c: O# k- O+ w#if 0
/ f9 y# O1 z$ ^+ ^ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% @+ i# O, t, C& d if (ret)- C, j4 b9 p7 t$ B( x
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 b$ |3 I" B# B' E* p& b2 k
"%d\n", ret);: w Q/ |/ s# b/ u* C
#endif
* J, h" }; P# F! @& H. g ret = platform_device_register(&da850_evm_tl_leds_device);( l6 A1 [ |9 A9 y6 r
if (ret)) C L4 E; }% J+ a6 g' Q
pr_warning("Could not register som GPIO expander LEDS");
3 T; j) Q: x8 N7 G, ^8 n( } else$ h/ Q6 L Y& q% j7 a
printk(KERN_INFO "LED register sucessful!\n");
' q. `: X4 p) ^1 `6 P5 c
' L0 r& A4 M' w, u$ H2 I y6 m return ret;+ s' T0 n% b3 j( c" }
}/ Z7 e6 I* D) c* k3 w4 K$ W
' E; G* X9 T8 o% H8 D B/ G- Ystatic void __exit led_platform_exit(void)" a) u/ S" B& l9 Y
{2 q6 z, F" w9 O0 k0 A h2 X
platform_device_unregister(&da850_evm_tl_leds_device);
3 A1 k1 B% X6 E* N. V O% [
% n8 m9 B0 a3 V1 t Q printk(KERN_INFO "LED unregister!\n");% Q# M0 Z" x6 {+ J/ j- @" Y1 z8 f
}
: [& \, q$ N5 W. ] c
+ e3 b3 z8 G; `' |8 W2 nmodule_init(led_platform_init);
, C Z! z2 k! H1 F7 c7 Imodule_exit(led_platform_exit);
! ~- b2 u# ~0 f4 k$ ]3 J# e. m e% i# ^+ Z n3 i. W4 p
MODULE_DESCRIPTION("Led platform driver");, s L% y8 A1 U. Q7 W. J3 j5 T+ Q
MODULE_AUTHOR("Tronlong");4 U1 p3 R; M5 I# P9 D4 S
MODULE_LICENSE("GPL");1 G( S: l9 ~! {7 p4 w! g
3 r! D7 p( J' r+ A3 v |
|