|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! l: k& A9 V7 }: S#include <linux/init.h>) V0 G! K3 T. h
#include <linux/module.h>
- M8 V1 \* T1 u9 }#include <linux/kernel.h>1 r1 J1 ^. b$ N* {$ q7 t0 s
#include <linux/types.h>7 V- P& h; d- T& h% j5 }, x8 S) U
#include <linux/gpio.h>
( ^5 `5 u8 L: X. g#include <linux/leds.h>
. a4 N$ X% |* }" ]0 }+ y#include <linux/platform_device.h>
( H0 _9 V6 q0 o
" W N+ I3 b7 P$ b `; j#include <asm/mach-types.h>1 `8 i4 z1 e; G& H* @8 u
#include <asm/mach/arch.h>
( D, N: C, B1 s) q#include <mach/da8xx.h>
; R8 Q0 ^1 }0 i3 C. h#include <mach/mux.h>
1 l6 U) S" y, S$ d0 _$ ~9 P6 E$ @4 x( R( n% b
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. a0 K- u# \4 x: S2 A#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" i0 y' f4 }% }8 b( L
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, Q; i6 S1 p) W#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 n. q. z2 I' \( {6 e( g; v* Q# r) ?4 ?
/* assign the tl som board LED-GPIOs*/
# {( e3 @& S2 P- |static const short da850_evm_tl_user_led_pins[] = {
1 ?: k2 Y+ e+ Q% X3 x4 c /* These pins are definition at <mach/mux.h> file */
$ F3 }* x9 ~' y" z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& g9 m7 f' X0 R3 R
-1
[6 ^9 s8 ]; \0 L# J, ?};/ ]" \$ U: O7 x \+ Y$ ]
0 p6 y+ _" m- \( `! ~- R6 G% [9 Fstatic struct gpio_led da850_evm_tl_leds[] = {! z& S% \$ A9 X s- ]# g
{
+ J& X( O1 Y0 z; f) F: Y% y .active_low = 0," ^" l; i1 M( z& s5 N
.gpio = DA850_USER_LED0,
" S' P* o U8 X# F) M7 f4 D .name = "user_led0",2 \9 h% L; n7 M/ I; Z( m- V C
.default_trigger = "default-on",
% W3 T& Q& |. I8 Y },3 d* {# Y. i& h' M& }
{9 q j ~1 d9 Y1 W! q, L5 x* d [
.active_low = 0,; I( G s# P/ X( K9 L
.gpio = DA850_USER_LED1,
+ v5 t" i1 K8 d# n6 u& [ .name = "user_led1", S \0 Z8 F( ?( F$ W+ _/ C4 z1 T
.default_trigger = "default-on",
1 ?% ~9 J$ I- x% _+ ?% M4 {; i },' z" x6 ^! o0 k$ i- O9 y; g0 _
{
+ S7 ^+ G( |7 Y .active_low = 0,
i$ v6 Y% _( o! q' a .gpio = DA850_USER_LED2,
" r3 F! G; q5 K1 E* D" W8 W; H X .name = "user_led2",
* p3 j E5 O5 o4 z- A {* h* O .default_trigger = "default-on",
1 p* O K" c1 I },* O0 l, U4 I! ]" k) o- ]
{
2 G/ x' X5 ?% `8 p .active_low = 0,: X1 b' \! z$ x' S
.gpio = DA850_USER_LED3,' K! {; t& I: I( v( b
.name = "user_led3",
+ ~9 F0 V, X6 W4 T .default_trigger = "default-on",* t9 P4 S$ l, l9 o2 O- q5 G
},/ k+ L; _) D% {6 l
};
2 Z L( p% g( N
6 z' h6 L/ d, o, z; D8 n7 Jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 Z7 p- _- K7 p! \0 U
.leds = da850_evm_tl_leds,
; }' s' D; l2 h) x8 n7 u .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% c8 A5 J% l( m- j. ~6 ^};
6 b: u" {6 `+ z! P- x
5 u; C$ t. {! R" c3 B; cstatic void led_dev_release(struct device *dev)
" N/ L6 r) Z. x* P9 b+ Y{
1 b, w3 m7 p7 ^/ h I2 @7 d};7 m6 M( ?% Y# X. L2 X" ?: J5 _2 p- G
! X$ U' H3 R0 R% W6 g0 K, M9 y
static struct platform_device da850_evm_tl_leds_device = {
* }8 r$ P. W; f& H .name = "leds-gpio",
7 Y+ U+ F2 m! `' j3 P .id = 1,; i8 q; w- ?/ C ]9 s) O2 p
.dev = {0 j. ] T$ ]( d/ q& C0 }! w5 _3 E
.platform_data = &da850_evm_tl_leds_pdata,' T7 [/ g% W. P; J* n. f" a, {
.release = led_dev_release,
# ]; _' N) [; ], j' { }
0 T' R9 O+ @3 ]5 B$ |& r: k9 F};) E8 J w) f" p: {/ k' V: n' S
* S* T! E/ V' ?3 O+ [
static int __init led_platform_init(void)
; a! H, w$ b8 c7 Y5 z: m \{$ P2 L* x+ C: e: C1 K6 e
int ret;
7 `) s( m3 h5 m3 p7 R- R# n( v#if 0
# {0 I6 T. G5 t. s ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- U, j- a" L9 k+ q" Y. ` if (ret)
- P) _/ u# Z' @: K w9 _ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 ?- R' k- l$ w q; f8 [
"%d\n", ret);
) r. P0 o; j/ u7 @#endif
4 h' F4 `* e# c7 U ret = platform_device_register(&da850_evm_tl_leds_device);
) q6 o8 C$ d- J& w; l1 ^0 H if (ret)5 q2 f3 j% c; L
pr_warning("Could not register som GPIO expander LEDS");9 ?4 |8 c- C6 E$ z
else
& y M1 @. n8 R2 u printk(KERN_INFO "LED register sucessful!\n");
6 s- ?# M7 H; A, Y# D' f3 s! N5 q3 \8 g# `; ?# L5 t
return ret; x( L! T2 Y. F
}: b, t" B; @$ @4 m: d+ i! z3 B
& s* y5 k+ g2 A f! P
static void __exit led_platform_exit(void)3 v5 v* P, s8 w- k; |. {* E
{/ w5 S" I x- _
platform_device_unregister(&da850_evm_tl_leds_device);
* |5 L3 F9 ^4 z& w7 X7 Q
* ] f) ~( P9 Q% ] printk(KERN_INFO "LED unregister!\n");
% Z/ ?6 X1 e. ~9 u# j8 |}% v3 F% p5 D" O0 D2 |
/ V+ U, R- N0 p/ j" y
module_init(led_platform_init);
! K# A$ B1 _: i I! i. ~- pmodule_exit(led_platform_exit);: i- x# r7 Q/ L8 _
1 U' {4 A0 W: u. j1 ~& {
MODULE_DESCRIPTION("Led platform driver");. {: k5 d ?1 }+ @; f0 b- @0 _4 Y
MODULE_AUTHOR("Tronlong");7 {5 w* H7 n. Q$ v# y" M. K- u
MODULE_LICENSE("GPL");- L, Q) ?: m) G) T" [" p9 Y$ e$ b# [
3 E! s o C% { T% [, s |
|