|
求大神给下面的程序做注解,请稍详细些,谢谢。 @' q; t! j9 c% ]5 V6 c; j
#include <linux/init.h>
9 v! V R) B4 u" V#include <linux/module.h>
8 I I& P8 v, j A( U#include <linux/kernel.h>
. p3 o' N" G- z2 A#include <linux/types.h>2 Y( v8 J2 a8 Y7 v2 M% C6 m- N$ `
#include <linux/gpio.h>; X0 E& p# l1 u3 z0 M6 U6 e7 Q
#include <linux/leds.h>5 ]( N) t5 I+ G& G5 r: O
#include <linux/platform_device.h>
2 I" z+ m3 x0 l+ C! e
+ y$ s J, K8 F5 X2 d#include <asm/mach-types.h>
6 c) U) n3 s7 L9 a L#include <asm/mach/arch.h>
9 }! y( d; E3 v7 ?% w% Z#include <mach/da8xx.h>& ?1 u; ~" j! i3 E
#include <mach/mux.h>
8 A+ P8 b9 I; j( e: q D V1 w$ {. y1 c: l( |, L. B& E. ?$ c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 C+ v& y d/ {2 e2 y/ Q2 z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 @4 V5 P; e9 i! `3 P# J# p% s#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. k" }( R4 n. t6 X#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 N9 l4 ?+ \$ T4 p" B: s4 H2 S) |! r% R/ ?% Z; `7 S
/* assign the tl som board LED-GPIOs*/3 X6 T, I! k9 F' K( M3 ^
static const short da850_evm_tl_user_led_pins[] = {
$ M3 N: F: v$ ~, u3 u+ a9 c) v /* These pins are definition at <mach/mux.h> file */
3 q5 t0 Z6 [9 r: A* g# B$ L* M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: S; [6 ^) @' n8 A( _
-1
9 Y! \ ^0 C4 }3 ^* i( T& W};) M* E! H: P- o; h/ a! I5 }
0 O' ^6 x; A4 N' @
static struct gpio_led da850_evm_tl_leds[] = {
3 e# M5 r; ~ `* J; u% Y {
6 e, w/ B/ r9 e( x1 E9 u1 x .active_low = 0,
6 w. N' n" Y- D7 H .gpio = DA850_USER_LED0,) {' b, a+ D, P. C
.name = "user_led0",
8 b" }6 h) m) n7 u6 i5 u8 B( x .default_trigger = "default-on",
6 B n" P& C# x# F' [. D; K* m. |' r },/ l d" [; E# _* i: o
{- j7 p9 h) L) h
.active_low = 0,
" X& U7 O/ o5 ^8 K i3 U .gpio = DA850_USER_LED1,
8 g9 X8 B, ?! Y. p2 m+ R* r .name = "user_led1",, \! K9 D) o: S7 u- j
.default_trigger = "default-on",
2 y* S' g, D1 A- w B0 |- q },1 D2 [5 g+ w, ?) A
{
+ a2 [8 C: [7 i& t" i4 r% \ .active_low = 0,3 N& c" \/ z" _( }, B1 k3 u; [" L4 e5 K
.gpio = DA850_USER_LED2,* q8 O" c6 H1 k# S6 M0 z2 X
.name = "user_led2",; C# K4 [! g7 F
.default_trigger = "default-on"," G% l- [7 P3 {0 ?8 v+ B
},$ K" Q1 [6 Y: j; j% U" c2 {7 X2 z9 s
{, [6 O P/ l2 r; X
.active_low = 0,: O. p5 ~, E1 Z+ [) G6 x: s
.gpio = DA850_USER_LED3,
& B7 B# @ u# W6 [" J, U8 ` .name = "user_led3",+ k" o; l$ v- E! u0 m
.default_trigger = "default-on",* e/ M/ }) R: m; e
},
8 L3 J, X3 a; A3 `% M9 E};
5 K6 H$ d% c$ A2 y: |7 _
0 K* F; Q3 V! J3 Astatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; u) c# W, M- p& ` B! w
.leds = da850_evm_tl_leds,
( u0 ^6 V G3 i( c5 r; m7 N& Q2 ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# C9 y+ U9 h+ J& X( X
};9 a/ H7 S/ R% g# `: e0 M. n
9 j& ^% u: T* M _0 l5 P6 r
static void led_dev_release(struct device *dev)$ V1 n q& Z, c8 N) j) U1 E( u
{
% y! E8 R- y* k2 g$ ?};
/ ]; s+ F R. V
8 Y" h% a9 k) F- ^static struct platform_device da850_evm_tl_leds_device = {1 X8 p1 O3 r2 h) T3 c
.name = "leds-gpio",1 S# d" P9 P$ n+ A9 N/ k
.id = 1," r4 B5 @+ i9 D3 S2 |, e, x4 i, p
.dev = {; F" m3 x9 a% U9 V1 S$ H
.platform_data = &da850_evm_tl_leds_pdata,
4 M: }( r7 e! O .release = led_dev_release,& \1 q5 X: e0 d4 k
}
; o2 H- C, x o3 N1 V; f" R9 v};, Y# b. Z) }9 C3 h5 g( P2 t
/ m; F; {% H5 r6 N' I- Y
static int __init led_platform_init(void)
8 g$ T1 Y: R' B4 m% L{
- ]' p5 z5 `6 F- C) e2 t int ret;
2 U( m- a* ^. ~) d4 a( u#if 0
3 Z: I3 |# O8 | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ L7 L+ K( q) b; u+ Z% p+ h4 G1 s if (ret)
" j' L4 d: V" {! k& u1 b pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* {% I( t$ [5 L$ s+ |0 c "%d\n", ret);
- A, f, x8 ^! u+ ~& K#endif
, ?9 |- k" R/ m: L5 M$ Z, t" n) [. @ ret = platform_device_register(&da850_evm_tl_leds_device);
8 t9 b5 R+ O3 V, j7 R7 Y if (ret)
1 Z8 W9 u6 }. G6 m% y, S5 D8 p6 E9 N pr_warning("Could not register som GPIO expander LEDS");
7 }. x0 W0 ~3 o9 Q0 \" h else( t5 ?) R$ k4 v4 z
printk(KERN_INFO "LED register sucessful!\n");
. q( j s( h; I' w. ?) R7 H2 `9 j" a/ X. y8 P# E2 ?3 @+ U
return ret;* j5 @! }( p9 o
}
8 e. D: e, [- M4 a
( ?7 e9 f0 ^- astatic void __exit led_platform_exit(void)8 v& `7 w6 A3 V9 l% C3 z
{" I' J6 P* c Y$ o" Y
platform_device_unregister(&da850_evm_tl_leds_device);
8 T( x8 r0 }5 E- _& |9 [- k" `
' @% v4 @# e$ a printk(KERN_INFO "LED unregister!\n");
- ?# b0 a3 {0 o& c; H+ P# t}
3 a" p. W5 k; f6 v0 c
1 L9 Z. ]6 ~3 t c! N; R; bmodule_init(led_platform_init);* n I( d$ `$ F u0 W9 ~7 z
module_exit(led_platform_exit);4 G/ B8 M0 i4 i
& g9 a0 G, I7 z3 W/ W& r
MODULE_DESCRIPTION("Led platform driver");
. s s9 l' I! p# r. R: Y4 B! U$ EMODULE_AUTHOR("Tronlong");
& Q' e" t, H7 C9 R, iMODULE_LICENSE("GPL"); f, w. o! |5 q- a$ F+ U2 _2 j5 a
: x* b' K- {6 B; ?* E0 E1 R
|
|