|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 o0 t1 k6 [& ~* e#include <linux/init.h>; S* }5 w+ F% Y; |6 k4 T6 u9 e: R
#include <linux/module.h>
9 V7 U+ G" _5 h" ?: H#include <linux/kernel.h>
4 v1 K7 F! i* b: E#include <linux/types.h>
) l- O6 D) H! z6 O. Y5 \* Q#include <linux/gpio.h>' H+ w% Y, T8 v! q3 r
#include <linux/leds.h>
9 v" [5 a2 m4 Z% ]- h+ f#include <linux/platform_device.h>$ Z1 f4 J- R% d: K/ i
( k4 I$ {# D7 D) U& H# o4 |
#include <asm/mach-types.h>+ D1 \1 C) i: O# Y* I& C
#include <asm/mach/arch.h>
/ x! N1 \ T- }) m/ m( P) w#include <mach/da8xx.h>; L0 F0 O# `6 r! R* P
#include <mach/mux.h>
n2 ^+ o7 g+ V! J9 C. M, v
7 y6 y3 @$ U7 u+ }#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 c( K7 t. ~6 n3 l$ ?0 `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 o; i1 b9 t& Z/ b, P' L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 ~' S# `' ]) T$ H: t6 A: h; T#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( \. Q4 E* T1 W6 {8 Q: S: |, m. Z) D* t0 j
/* assign the tl som board LED-GPIOs*/
- K/ O' x; z: U g. Kstatic const short da850_evm_tl_user_led_pins[] = {* o: c$ p7 Z' _! c
/* These pins are definition at <mach/mux.h> file */$ z3 ~: N- I9 `2 t* r4 q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) o, d& y/ y8 n; @0 y -1
7 H) F. q1 [' v2 |. B};) T; s3 c( d$ O' j8 v+ R& ~& Z) o
; C5 v" Z5 k; _8 q/ `
static struct gpio_led da850_evm_tl_leds[] = {
- Z0 A; X; `5 T {' D0 e& L. Y' D m
.active_low = 0,( u' x( m0 m6 U7 t$ B
.gpio = DA850_USER_LED0,9 M% z. \: A. V. b: N- b, l
.name = "user_led0", K4 X3 n/ `: S
.default_trigger = "default-on",; r* k9 v! F3 T
},4 B3 |, W8 s6 ^" E" x" M
{
: D: B P1 s, u& {5 E, v .active_low = 0,9 z5 i: r/ H X, A* j, D/ t% H
.gpio = DA850_USER_LED1,9 W, F8 P# n8 \) x% S
.name = "user_led1",8 ^4 t* ^2 M; S8 M# f' G
.default_trigger = "default-on",
1 k6 w" w5 a5 a },
) G; T$ r* W2 q, @8 W {
0 l# w( u8 B0 S8 e8 Q1 j .active_low = 0,
7 e7 F5 J' W. n- y$ r& V% z G# m .gpio = DA850_USER_LED2,8 F2 ?( z, R" W9 y0 U. _" C/ B8 ~3 j
.name = "user_led2",
+ m/ d3 |" ~% [7 x6 m .default_trigger = "default-on",
/ S( i) F# c$ p4 o* h },
, H, v5 L! S, S2 ?. O1 Z {
! e. a7 |; E2 H/ T! o1 W .active_low = 0,, }7 Z& o7 z( Q# c# d
.gpio = DA850_USER_LED3,
9 G% \* Z- h1 B1 @* i8 V+ p: \3 L1 N .name = "user_led3",; h3 ]$ U; u4 ]
.default_trigger = "default-on",
! O @9 p0 F3 r1 m: ~8 C2 x7 _% R6 t },9 M8 J, g1 T" ]3 A7 p9 n& Z
};
3 y- d: U" M4 S3 t- d8 y/ P A- |7 ]- F4 K4 A W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) ^. ^% G5 r7 W& t9 O
.leds = da850_evm_tl_leds,' j' D$ Z5 L' a1 w7 Y. [, \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ V. h! }, e) y. B: `2 B7 I
};# h: R5 i8 C& l+ e) c: @# l5 @
! [9 i4 X# k9 ~4 `) f
static void led_dev_release(struct device *dev)1 q8 r# |3 M, d9 M5 n/ {
{
/ p/ `1 g2 J+ C+ l- b' L};8 l& O, w4 P" D/ ?( _
4 n2 V) f( n+ r9 m/ p
static struct platform_device da850_evm_tl_leds_device = {
8 T, p9 w& Z) \$ @/ `2 m- o .name = "leds-gpio",5 c$ c5 T1 M3 p. D/ ~
.id = 1,
4 @; S$ x* u q2 D) ?" W: j8 S .dev = {
, K Y* n; t8 W7 E) v .platform_data = &da850_evm_tl_leds_pdata,9 \ X' k% x1 f
.release = led_dev_release,
& F0 R. X! F K T/ U }
- Z3 F2 x' c% w4 u1 V8 b( ^};" v/ c$ f. Y! O8 X
5 H1 `7 I6 l2 L8 {/ x2 K0 O
static int __init led_platform_init(void)
% z% Y% N( `3 e1 y8 q{( A9 c& D1 T( P/ B
int ret;
: p5 u' o; n5 {1 V2 ]; U" m7 H#if 0
- S; w6 M8 O: r' q9 M7 T7 G2 s" { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" j: B. e3 a7 a5 l if (ret)* I5 g% k. j: j# x* l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 P% ?1 e0 m7 z1 ?6 x4 r1 a "%d\n", ret);
7 T) r. ^+ x( {) f3 _#endif
v- }$ c; Q; i9 C9 _2 b* K; P/ R ret = platform_device_register(&da850_evm_tl_leds_device);" C/ _ C7 x3 s6 w
if (ret)
+ C( v- l9 ?) b7 X8 x pr_warning("Could not register som GPIO expander LEDS");- X" T5 `" }6 v c8 @) a3 t
else5 ?: w3 y% z0 \- M. I' u
printk(KERN_INFO "LED register sucessful!\n");
- s Q( \7 f/ D+ s) ~ T
; O* S ~1 b+ o2 L) F* a* { return ret;
8 |8 p2 a: a1 p6 c}
* a" G+ O5 l. p# R
. u8 @/ w1 v7 W6 k3 P% q& Y# ostatic void __exit led_platform_exit(void)* W5 o7 p, p2 T1 [! t+ ?/ |
{& P- o) ]" B* ]
platform_device_unregister(&da850_evm_tl_leds_device);+ k$ |( q/ R" _
6 ]# `6 X/ L3 x printk(KERN_INFO "LED unregister!\n");
/ j( _' i3 m6 c! j# [}/ b }. G3 X1 x/ w( I* Y3 [
1 P: o' | V3 X) t2 g) d& Dmodule_init(led_platform_init);
/ D5 k2 B, ^/ Q R1 zmodule_exit(led_platform_exit);) ]# l( g' O* H+ w
/ i; k/ ?3 n% k2 B3 \' DMODULE_DESCRIPTION("Led platform driver");
9 a& H# f" ]8 ~8 J9 ~& U; w: [0 `MODULE_AUTHOR("Tronlong");1 ^2 f$ D/ b& x8 j R
MODULE_LICENSE("GPL");
3 |5 |9 D9 ]. Q( K! D& c; }. k( O& s7 k$ B# f! E; F% \
|
|