|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 S2 t- I x$ U' {! T4 r/ [: B#include <linux/init.h>
0 z0 r3 c% q& B& f" V4 Q+ ]' E0 u#include <linux/module.h>. V% X1 n1 E3 W
#include <linux/kernel.h>5 \6 E' d9 z; y* T: { F) T
#include <linux/types.h>8 ?3 Y E% `/ n- p; `6 E' ~% k
#include <linux/gpio.h>" {* p- W3 P1 p. c
#include <linux/leds.h>( ?' f7 E0 P0 i/ [
#include <linux/platform_device.h>$ B. B* d. }8 w
8 |' [4 _# R m; T; r
#include <asm/mach-types.h>6 p8 l, b4 p/ u2 [7 T8 [8 R$ Y& L
#include <asm/mach/arch.h>9 T8 N% R0 R. M4 Z y- s( A- S
#include <mach/da8xx.h>
3 N. k1 \/ W3 `& b9 d4 R6 c#include <mach/mux.h>$ R' W8 v- z X/ E4 f; \" s
1 Z5 q* V: c% t+ W ~) C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# Q+ ]" u4 N9 z: O; f* b#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ T0 E( I7 k0 U- i6 g) ?7 [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 P. c0 G5 M5 P- X. I' V
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: t: E& n+ D$ S$ @7 N
* u) K! _1 @8 [7 A( t/* assign the tl som board LED-GPIOs*/
! a5 B" | W4 ]. M& g% Fstatic const short da850_evm_tl_user_led_pins[] = {
" ]' j# q% h5 K0 c7 r /* These pins are definition at <mach/mux.h> file */" ~% b$ l$ U+ K# \1 I
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# I: z/ ~) o. C -1
8 L' [& f+ _) f. Z( n};
, C) s' W% b, q; T q8 R" h! J3 E& m' K) R/ V# d _' D
static struct gpio_led da850_evm_tl_leds[] = {
9 E5 `- f. Z0 R6 P9 p9 j. t {
9 |! E9 E9 H U0 |% A .active_low = 0,- \; O- X- ~) g# X4 O
.gpio = DA850_USER_LED0,
& A, Q4 s) S4 a, D* f9 Q1 X T' o .name = "user_led0",9 r: x3 ~* |4 p$ r, K: G1 `+ o
.default_trigger = "default-on",
& j9 I* V# q: k( l6 u },5 A1 b) T0 J+ j: b5 _3 Y
{% u6 Y& t, G6 T
.active_low = 0,
3 `1 d0 t! `7 A .gpio = DA850_USER_LED1,
0 I$ V4 k8 c* [4 p3 c" P .name = "user_led1",
# T0 `, i$ V7 S .default_trigger = "default-on",) j) N2 I6 B; r
},2 q( v: h& ~2 ]4 m! D5 S/ C3 M
{2 a2 }! N+ M1 [ z
.active_low = 0,
) K) C, U) \; f* v .gpio = DA850_USER_LED2,
% k7 E2 V! P' @( l( [; m5 ^ .name = "user_led2",
2 ?0 G G. K( |5 k. B/ W2 w% { .default_trigger = "default-on",; \8 h( y8 U& o' ^* z/ Q8 ]) l8 O
},
5 J3 A# ~7 }3 l5 P' @) }% E {1 ^ z, u4 T; L( M6 `
.active_low = 0,) y2 ]+ J9 C+ O; Q" d+ B, } Q
.gpio = DA850_USER_LED3,
# ? K5 U, f G# E" n ~) n7 ]: b .name = "user_led3",
" @( D; _7 E9 o m6 s1 i- v .default_trigger = "default-on",
6 n- I% U) q# X! b9 ?- z },
) [4 k* {3 v6 {% m! b: U2 W. @; I};
$ c5 H$ {! e" I: K) Q
) W2 o- s; H/ |9 |static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; o- K" l- W, j! B0 a# D- ~ .leds = da850_evm_tl_leds,
% D3 y( t" k3 [- h5 w .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) C$ J% X3 N' h3 o};" Y; j2 `" ~& `) L3 U. ?
" M1 g! h z1 O+ @2 e2 h
static void led_dev_release(struct device *dev)' z/ I" J' Y X% M, a7 N
{
& P$ O9 d1 ~" ]7 Q. N};5 J& E! s8 M# U8 _9 i+ e
J( \: T/ t/ N: ?/ p+ H- d
static struct platform_device da850_evm_tl_leds_device = {
' C R' Y# G& b .name = "leds-gpio",
' L" h' B( Q; T# `7 u: W .id = 1,
" E/ F y. }, p6 {6 [ .dev = {$ j) M/ O, g9 Y( |* a Y' u! a+ F" J
.platform_data = &da850_evm_tl_leds_pdata,
! g/ z$ U/ k$ f; |$ o .release = led_dev_release,% S. i& D1 `7 @4 v9 P, X5 w+ {! z+ O/ C
}
$ y' G( {/ ~; `# b! L) i% E9 S};5 i" d" y. D+ @' U. v+ q6 {
9 _, h3 R% n( lstatic int __init led_platform_init(void)
* W% z+ F& k: q3 E1 B! P{
( e. v2 S# A" R int ret;/ l" K6 t# D. U! ?! V: g; T* j
#if 0
9 P( w- H/ y8 T3 X ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ ~' Q* c; _: a& N0 |5 J4 m3 V: u if (ret)
) j' |' B2 w4 I4 v. a! c pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* ]1 P; }! X/ a/ I1 a n0 T
"%d\n", ret);6 f6 r+ o1 r D8 ^6 w* u
#endif, v, _# m" {8 K' K% d
ret = platform_device_register(&da850_evm_tl_leds_device);
# t' x. E/ U# W l if (ret) U5 W/ y8 b6 B; d+ K
pr_warning("Could not register som GPIO expander LEDS");5 f2 F7 V }% R" }( x
else. H4 y) ` }! d' }6 W8 T& v8 Y0 x3 L5 x
printk(KERN_INFO "LED register sucessful!\n");0 K# G' ?; X! E4 r; w
3 v% A. b' l4 t a7 ^& x return ret;* }9 K, m' V3 W$ U4 o
}. \. R Q! C7 i3 [
& j$ J& I; W: Y: ?static void __exit led_platform_exit(void)
0 h! }9 a4 c% R8 |{- ]5 P0 J1 C9 r/ c) x
platform_device_unregister(&da850_evm_tl_leds_device);# n, F& \) U0 U9 `9 M0 A
8 Y% ]+ k- E2 `2 p) \ printk(KERN_INFO "LED unregister!\n");
- ^3 c# v6 n$ Q$ d5 d}
6 a* g, b% ^' ?/ w- i. q5 s: r
7 I ]. g) O( C* l; W% ]module_init(led_platform_init);- d1 B0 H3 v0 s8 ^% z; `* T
module_exit(led_platform_exit);9 c [$ w, Q4 B4 v. D9 |" X
* J5 B# g; C1 B" `+ V0 M2 k
MODULE_DESCRIPTION("Led platform driver");7 S1 V5 M' Z1 x2 L) s: b( n& Q7 g' o
MODULE_AUTHOR("Tronlong");& [5 U% J: X! b( D" Y
MODULE_LICENSE("GPL");
- |% L( F1 X6 {7 R8 [* J& A5 T
& J+ @6 ?% {: R2 l5 J0 F& Y |
|