|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; r. ~& f, [& S J! Z7 W1 e' v: n
#include <linux/init.h>
" o7 S, | H% }4 i' t, Q$ y#include <linux/module.h>
& d6 l7 E p6 d" B r) x& n#include <linux/kernel.h>
; x E3 ]/ [1 I) S#include <linux/types.h>8 l: p) ^* A3 E) O2 r3 `+ K, h
#include <linux/gpio.h>4 D. v' B( o* O A1 Q
#include <linux/leds.h>0 o9 }, h9 X- N; u
#include <linux/platform_device.h>5 Q0 ` R- t' ~
+ R1 ~5 V& k9 J
#include <asm/mach-types.h>3 y2 B( |) I' a
#include <asm/mach/arch.h>4 n% \& n' G- N! g4 {
#include <mach/da8xx.h>9 c" G: {: b2 ~* D7 W* m7 }
#include <mach/mux.h>
( T. _4 x) u+ V3 W+ i7 e0 J- f, E+ W0 o' e
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ i) A9 m; j( a- M3 ?#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- o T7 @; P& p8 X7 p H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( f9 a7 ^# p7 P5 A# M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% M' Z' p6 I$ O+ a! }4 l2 u
7 P/ V* i3 a* b
/* assign the tl som board LED-GPIOs*/+ @/ C; g& ?1 @6 H- K
static const short da850_evm_tl_user_led_pins[] = {
, W# {0 j( M0 c4 U2 O% O /* These pins are definition at <mach/mux.h> file */0 A5 u( l. o; n* H( i
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; y. u6 |" f0 ~# w# }8 P2 `, z -13 {" c J: n. U' T x8 T) ]
};) N: X" N# S! K
+ K5 k" k% u( @5 Z
static struct gpio_led da850_evm_tl_leds[] = {
- d2 U! E) n# x8 a5 q' `" ~ v {- h# C1 @& ~" S' C1 G' ]+ N. F" m2 V# ?
.active_low = 0,
* C# A# \6 f" z! Y2 l3 a: G: z7 M8 J/ b .gpio = DA850_USER_LED0,/ r' @) U8 `6 |" m! [; b
.name = "user_led0",
5 K' d U# h& T5 y/ F' B" Q( ] .default_trigger = "default-on",' u9 l/ z" I; N# ^3 H3 l
},0 L4 F4 h' j2 l
{8 f L7 r! G9 ~3 [0 Q! L0 t$ H
.active_low = 0,! {' x/ I" H, G+ b, i8 b5 L" u; ?
.gpio = DA850_USER_LED1,# F1 O' r) ]* T$ M7 s
.name = "user_led1",; d: z) e8 Q; M5 }
.default_trigger = "default-on",
* C4 E; A( B, ]( x; f! ` },
q' x. K/ B2 L. D8 h" e {
# o# q) }! |4 L .active_low = 0,
5 l% E3 E$ m# t! i' G F( t .gpio = DA850_USER_LED2,
5 m- X& S3 J: L1 p0 [( @ .name = "user_led2",
/ ]' k. d+ N. a1 o- x- [ .default_trigger = "default-on",
0 e, f1 n5 o( l# E* w$ F },
. K# r" X( U1 U! Z' y2 n! B {
/ L1 B! K" O2 F& D M$ R .active_low = 0,* p# n3 N2 _7 x4 F
.gpio = DA850_USER_LED3,( w- Y7 b9 k9 Q) {! O
.name = "user_led3",# {% @' X2 `) g# {9 C' a
.default_trigger = "default-on",' V+ N) G/ ]! R. f" q
},
/ H/ `. {3 @+ Y& J+ {& A};
3 T# J) r4 C9 I& }$ X5 x( b
7 G* U* U' j) M' [static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 C& H) K5 U$ ?; @- J/ D1 c .leds = da850_evm_tl_leds,
1 c% w9 s% y$ B! k$ r$ q+ i .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ L; C l; ?" A% h# a}; Z K, z/ o: i0 X0 S; X& l0 v. w
/ @7 K) k) g: L; wstatic void led_dev_release(struct device *dev)
; [# A* `) h9 h/ d8 w& k! C{8 Y# Y* y1 c7 p4 U' s
};/ o* s7 D* g; i6 D$ e
- ~8 r& G9 f v. h# s( T
static struct platform_device da850_evm_tl_leds_device = {3 h3 `" F( X `1 _1 |" M
.name = "leds-gpio",7 j& R% W6 d, h2 Z f3 ^3 l
.id = 1,9 f; O( B; S9 d" {- k W
.dev = {
, \3 z- I3 j1 ]; R2 f7 ~+ w .platform_data = &da850_evm_tl_leds_pdata,4 E; z0 q7 r1 o% S- k: K! R/ U
.release = led_dev_release,
" _# a! C5 J2 _6 u- P }2 y: ?7 c$ `' \
};
! D3 E% j# z* t& ~! z
- j1 Q: X: p R( v6 r3 i# m pstatic int __init led_platform_init(void)+ O0 V1 U6 M) a; l6 W: V
{6 K. t( W9 S& P& S& M& l' e
int ret;- ^! v: k* k; }6 I
#if 0
; L' u: O9 e! Z+ Y% `! L7 b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 ?% c5 V9 d* Z3 k if (ret)- L" y& Y, _8 r( l7 O$ s
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 M3 ^& w" ~3 {1 }9 V. J
"%d\n", ret);
$ I9 f3 a9 O2 ]$ E/ o4 R#endif
5 @* V/ M! s7 { ret = platform_device_register(&da850_evm_tl_leds_device);. ^# r2 W: I/ w3 j0 [- i) v
if (ret)" p% s' L; g5 ]! W& X$ d {4 x
pr_warning("Could not register som GPIO expander LEDS");2 a6 H: r* u$ w+ `; \9 Z# N( h
else
- d1 \5 W7 m8 | printk(KERN_INFO "LED register sucessful!\n");+ J5 T g+ L, F* K
6 J) j# R- |+ W8 {( g6 l" y5 U9 A# o return ret;% G6 u# Z9 q' u/ x$ g0 H
}( `5 o6 d. v' e& v$ ^ D
; H) \' U$ {1 ~" q! q1 B
static void __exit led_platform_exit(void)+ ~. E# n" y2 [# J% P
{* T5 p7 p- e; W
platform_device_unregister(&da850_evm_tl_leds_device);( ~; j8 h+ @. T
' b: Q& v4 J; Q7 x7 n8 y( k printk(KERN_INFO "LED unregister!\n");
3 j: j: G( X% \, @4 p- B, X4 J- M}* D# i |# O2 c( u# Z
! k5 ?' j! P! Z* g& I
module_init(led_platform_init);( A2 i# G. I4 t: K! `* `* [
module_exit(led_platform_exit);
. x( h* U6 u. O0 x6 u/ {7 Z: Y( D8 @9 u! [
MODULE_DESCRIPTION("Led platform driver");2 i* z5 Q7 g! c7 Y% @. A; L
MODULE_AUTHOR("Tronlong");- _- z( |- l0 E/ Y$ t
MODULE_LICENSE("GPL");0 O; n Y8 I& \( G( z/ G$ n2 K, ~' l, S
% Q+ B& L6 x* j. l |
|