|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! f. E. L: L9 Q4 U) y0 d* _
#include <linux/init.h>- D' E( w8 Y/ }# o9 R3 D
#include <linux/module.h>
2 M* x: k5 q% A0 @2 _#include <linux/kernel.h>
$ z( _# I1 o/ h8 i% w% {$ `4 f#include <linux/types.h>
: ^" u0 D+ |; j4 K4 [- ?#include <linux/gpio.h>0 l I Y# s0 H
#include <linux/leds.h>( c. n! e/ P! h3 U; ?+ z
#include <linux/platform_device.h>' v3 X9 P' O f# [. z. A2 P
- f7 `) v& _- J; X; m0 m#include <asm/mach-types.h>5 N T( X* |3 G% n, n x
#include <asm/mach/arch.h>
. s/ w: L5 L6 \! c( H2 I5 b#include <mach/da8xx.h>
& I! i& b1 p1 j+ q8 h+ `" F9 W#include <mach/mux.h>
0 C! M" U( D0 n3 A5 H6 C8 w, u& w, m1 C& Q$ l; p
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! h+ r" v2 G( n( B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 r5 I2 Q0 b5 F8 T: \#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). L" `/ F w3 t6 |9 d4 m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( `! N& r2 q9 g9 B
( _: @5 c- T. ` g8 K/* assign the tl som board LED-GPIOs*/4 C, V0 z o- k2 W; C
static const short da850_evm_tl_user_led_pins[] = {5 K. u% ]8 s/ e! ~* q8 g2 \
/* These pins are definition at <mach/mux.h> file */
9 T# X1 i; p. }/ z, r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, t& M r6 p+ Y* m. ^6 N
-1
5 D0 G% |& F; a+ B0 M};& R7 {! Y8 A9 R0 e; m
7 D+ J( z* o1 B$ M
static struct gpio_led da850_evm_tl_leds[] = {8 g7 ]2 ^3 M3 k3 E9 B
{
0 T4 ~, N }- P& m .active_low = 0,+ d- ]) L( N1 K8 y2 n; e
.gpio = DA850_USER_LED0,' h7 b1 g$ A: b( n) X+ q2 W
.name = "user_led0",
7 B" [5 ]% w4 {1 Z1 a .default_trigger = "default-on",
) U/ L( G4 F* m& l: x A* o },* k! G6 s& c' @1 I9 h* Y+ O
{- k! s0 P/ v& z% K) d
.active_low = 0,
+ x& \- G, ?1 V4 V' \/ M .gpio = DA850_USER_LED1,
# [- d8 S9 V& q, u9 s( l. x .name = "user_led1",3 p1 l% ^$ j/ `/ @
.default_trigger = "default-on",+ T3 Z( r( H2 U0 `% g5 x
},
' \2 p* o; H% X* _/ b {
2 w8 e% X* O! T .active_low = 0,( k! P7 ~, O u2 @ B. D
.gpio = DA850_USER_LED2,
$ D0 ~9 b0 c; t1 v .name = "user_led2",
# w" n3 ]3 }7 [2 b& u! t .default_trigger = "default-on",) j: K0 x0 u6 C n8 a% x
},- j/ U7 e' K( |5 X7 j
{
4 g3 z6 A2 P, S/ q .active_low = 0,' r/ s, o0 ^' o$ f% }
.gpio = DA850_USER_LED3,
: s, U. \; w, j+ S .name = "user_led3",3 k6 t- z: g$ U
.default_trigger = "default-on",; k* [4 y) _# \, |6 G+ M# n: f
},1 \; S# Y4 Y. \3 K" \$ [5 m9 I: ^* b
};
- K' h9 t: G4 o+ K9 }/ x% [1 w) n% s, f' B/ G
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 l+ s( L5 T, n- f& m# ? .leds = da850_evm_tl_leds,) V% p( M+ R- Q: P' L* \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 s# @2 ]+ @3 K4 W$ B5 i# ?
};
1 ]$ K2 \' C; G: Z$ b) h3 T# X. A1 N* n* n! z
static void led_dev_release(struct device *dev); {% g1 E4 i) w+ ?5 {# H9 g1 v9 `
{' l8 G9 D* P, {- R
};, [( M& j5 d/ W
- d# T2 |* W3 h7 T" W q: L! _
static struct platform_device da850_evm_tl_leds_device = {
; T5 Z' j0 m+ t+ M .name = "leds-gpio",
0 K+ M* {1 Z0 |3 p/ k! [1 w- N .id = 1,; F! Q2 b& @9 |, m
.dev = {3 Z: G* ^- N. O$ u5 Y% ^+ m. U" b
.platform_data = &da850_evm_tl_leds_pdata,7 e# I" R7 T5 w) ?. r5 Q* z7 T; S
.release = led_dev_release,
1 b. \3 k5 J2 y0 o* w }
8 r* ]0 `2 y2 Y# h8 V. @};
6 b5 a# i6 f# `
/ k; D* `* f7 v+ n ^ l) pstatic int __init led_platform_init(void)
9 S8 l5 J0 T& s9 T3 v! L{
+ o) q L6 i1 d4 i* q8 h int ret;6 @+ C6 D; ]% z' ?9 v+ ^- u9 e
#if 0" B, Y2 A8 R4 b; }2 n9 T
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
G, e: @1 J. c2 {; S2 z& x if (ret)
# v0 g4 ?( Z) r) e' k. r" Y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 t0 p5 x0 X* b- ^9 L. c# q; d7 r
"%d\n", ret);
6 e9 {- p# O3 \#endif
( M( }2 I% Q" f% L; W0 n$ M9 x: @9 `1 d5 h ret = platform_device_register(&da850_evm_tl_leds_device);
, p- ^. V% X2 X! Q( N2 ^ if (ret)
$ S3 `8 w6 e! ~ r1 q" w pr_warning("Could not register som GPIO expander LEDS");
/ [; ]' ?4 J& b! T' E$ D' O else
( x) V6 y1 G) r$ {7 f" B6 r printk(KERN_INFO "LED register sucessful!\n");2 C2 n4 a# W. P0 H- C: L2 e% J' z: |
9 X6 q a1 o! k
return ret;
/ R' I# P, l6 [3 [}
: ~- k. G+ C! [3 {6 g* W2 _7 U4 M! X6 o1 ^
static void __exit led_platform_exit(void)) t) T' K: s% M% U; s6 U! P9 u) m/ i
{
9 Q2 h6 U7 |8 S# E- P% i platform_device_unregister(&da850_evm_tl_leds_device);
( P8 ^9 S, p1 z" r9 p1 N- U. l2 P5 |& g3 h v$ a$ q/ |4 v7 C
printk(KERN_INFO "LED unregister!\n");
9 x0 e7 j6 W! X. H \. \: P; q}
/ L6 l5 t6 l$ d& b& {% h' t- X/ T6 c% o$ _/ `1 y; o
module_init(led_platform_init);
' [! E! Z. w) P' xmodule_exit(led_platform_exit);8 _: F2 K# n: z$ T" r
# o* K( w; Z% }
MODULE_DESCRIPTION("Led platform driver");
: T5 G0 b8 ]4 l1 Y. u1 z% HMODULE_AUTHOR("Tronlong");
/ Z* _1 D6 v$ l I& ?! XMODULE_LICENSE("GPL");4 n2 k7 d" U& r1 r5 ^! S, W$ `. s O
% Q; M7 S& Z" }% \, Q
|
|