|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 c8 r8 `6 E( l1 `0 I#include <linux/init.h>
1 V* L% Y! @3 _+ V#include <linux/module.h>
! b5 T& f0 B: t% `#include <linux/kernel.h>
) F5 E+ F% S: T! d# L; Z! s#include <linux/types.h>( Q. j. U( Y3 N: R9 o
#include <linux/gpio.h>4 n' h: d0 O% y; k l( D9 T
#include <linux/leds.h>
7 d* h m5 H& G* K# Z6 E#include <linux/platform_device.h>
8 ?3 B5 j5 J6 J8 G- r
% v& B W/ ]+ J' o( A9 o#include <asm/mach-types.h>
' J* z* V; N. \5 y5 D" g7 w5 G" A#include <asm/mach/arch.h>
* T3 U6 ~2 L W, B7 t/ O3 _#include <mach/da8xx.h>$ E" h Y# V9 a% Z) r6 C
#include <mach/mux.h>
# l4 u! p9 F5 l2 |) t+ h( `6 j! l9 ?5 g$ ], K1 A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). q' l' t& P' I& j; K
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 |0 b' B; l; z3 ?) z& \$ j- T7 g" I#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* M# `/ D( s, ^" R+ i7 O
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 `) G% _8 y6 b, \
+ ~. R+ V- B; f8 G- V/ ^! s/* assign the tl som board LED-GPIOs*/
9 j1 m) ^: W- N# |% Hstatic const short da850_evm_tl_user_led_pins[] = {
! { k1 T% j* U7 O$ ~ /* These pins are definition at <mach/mux.h> file */) }0 j7 D, R# h4 n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' p% w! t5 l" y5 s* k [ -1
: k% W8 j. |, x, u/ J7 ^};
2 c4 z0 j V) N/ S; r: T/ N2 Q+ B8 w- {' O
static struct gpio_led da850_evm_tl_leds[] = {
9 E# B# a$ J' Y: W {
* X+ c8 u. R6 ^- F .active_low = 0,
; v$ ^% r; I. ^% @6 j .gpio = DA850_USER_LED0,
2 L2 s+ ^* k# b .name = "user_led0",, e/ s( d8 j7 I# D; j
.default_trigger = "default-on",
% C, {' s" |6 T9 S0 W' z* n) x },$ e/ u' K& d, `- U0 a* w' @
{# n2 m5 p$ s, U- V0 i# q% P; i
.active_low = 0,
& Y( [/ a5 W3 q5 \) | .gpio = DA850_USER_LED1,
x" I3 C* y' I! y! v: ~0 r! q .name = "user_led1",; n. S8 M3 }, O" f
.default_trigger = "default-on",
8 h& n$ v- p# z8 ?" s# ~+ K },
4 C! g" l6 {; e6 E9 y3 J {) b4 W9 a% t9 e8 M W
.active_low = 0,$ R. y0 _) i) l8 ^
.gpio = DA850_USER_LED2,
* O8 b% K6 {$ e .name = "user_led2",
9 o2 I! s- ]. C4 u2 a1 L .default_trigger = "default-on", ?7 _/ A+ I/ H' @9 v8 p* p$ P. B" }$ A
},8 y. b7 g& W4 L/ ]$ W1 ~
{
* S" j6 m* b/ B! I .active_low = 0,$ o% x2 b5 L" G" ^+ L
.gpio = DA850_USER_LED3,
: s' B* e: S* V* e3 ` .name = "user_led3",! H' \! r W( N9 _- ~ Y2 N/ d6 C9 M* i
.default_trigger = "default-on",
* m: g; l x" O# L2 c },
, U3 G" b. y$ X! L. d$ C};, W" k) e9 e& i
( k8 b% N/ e2 C6 g4 Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, E$ W h6 N# }( _2 @$ o% u
.leds = da850_evm_tl_leds,- U6 r7 B) g1 k: j0 J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; W( t: O' d" E. N: Q T' q
};. h- o) x# ]2 i! [" l9 t+ F
' q* p0 e: F3 X4 E6 Q# z: R7 S
static void led_dev_release(struct device *dev)
1 }: v9 t$ s4 S- ?9 T8 L) w{
# _/ W$ Z: Y% \8 S};+ U$ W: Z0 D. t9 t4 P
8 L7 F8 y4 S2 w% @static struct platform_device da850_evm_tl_leds_device = {
& Z1 h* [' v5 j .name = "leds-gpio",
F9 u' _! _% t( d ]( _ .id = 1,0 R' I' h9 ?9 l
.dev = {
3 n: ?, y& P* }+ S4 w, R& @9 o .platform_data = &da850_evm_tl_leds_pdata,
) H) ~8 N2 C0 Z .release = led_dev_release,- R' m! ?- }; C4 E
}) Y9 U- W3 _6 Q5 k" C9 d
};$ O/ G1 y5 E* {! h
8 s4 N) A$ M X7 z; j, Jstatic int __init led_platform_init(void)" G/ A4 t/ B! }1 z7 b
{
0 b8 m8 l; w9 A2 j2 S8 p int ret;
/ e6 j: h, _8 u7 F* ` b# z# ?#if 0. h$ R0 a T0 V1 n, G, o" `4 }
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. @' \" M' g I$ } if (ret)
# Y/ { B1 Y6 {: ~; D pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& N; q: P+ R3 }, T* U/ W "%d\n", ret);8 W) d, z9 D/ G e- x* }" @3 g
#endif, }0 Q* @7 G/ n d
ret = platform_device_register(&da850_evm_tl_leds_device);
& s6 _% z c) F/ G if (ret): C$ K- X0 u) |$ F8 {/ l
pr_warning("Could not register som GPIO expander LEDS");4 d1 `2 W- |3 q) U" [
else
" J+ [' K w5 T7 q- U printk(KERN_INFO "LED register sucessful!\n");
* h$ i+ e4 Z/ t8 o; ?0 I! c* _# n# @
return ret;* g0 i7 ^5 Y( [
}$ p- g3 u3 h. @
7 c9 T; N; F1 o; Kstatic void __exit led_platform_exit(void)# R0 P2 v7 B& H( Y2 c0 v) Z- n% O* X7 e
{' y3 j) |) _+ \& v2 l
platform_device_unregister(&da850_evm_tl_leds_device);
7 f4 q% R8 a! N6 k+ `# F( {
* E5 t+ l& q1 J' I) v printk(KERN_INFO "LED unregister!\n");
9 P/ `+ C; K( d: l}' i. O( F. j- `: s
. x7 A4 R3 Q; }. Z9 D/ k1 p$ W8 umodule_init(led_platform_init);
7 r! t! Z6 A3 P9 p& ?# Zmodule_exit(led_platform_exit);2 d4 Y5 i, j+ n" b X, m
# Y9 ]$ R& n5 h' r
MODULE_DESCRIPTION("Led platform driver");
6 R. j1 n) ?' e# c/ r2 [4 D0 rMODULE_AUTHOR("Tronlong");
) I$ C! t. F% i% |- e/ RMODULE_LICENSE("GPL");3 \2 R! o7 y$ u' W
9 O0 k$ d5 b! ]: X |
|