|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. E3 s( T2 E* I#include <linux/init.h># U# Q( @4 A1 ]; K7 Y m) h' _
#include <linux/module.h>: l3 T7 G6 C& B) Q
#include <linux/kernel.h>
9 b9 C& t0 `0 }/ r! k8 h#include <linux/types.h>
0 o5 z1 s* E6 S k4 h: ^#include <linux/gpio.h>/ u$ s0 L: J( P- Q) ~
#include <linux/leds.h>
. ^; b5 N |. G. \$ f, Z#include <linux/platform_device.h>! V( u$ G7 f0 q" u9 b" H* P
9 [7 q- {% K: V9 l) T K#include <asm/mach-types.h>4 r9 V0 t+ V% ^" g
#include <asm/mach/arch.h>9 ^5 F6 Z3 G9 `! v- ~, C
#include <mach/da8xx.h>1 q- F4 u, j8 t: T
#include <mach/mux.h>6 ?. C3 o9 N/ O4 M3 z C9 ?6 |
c* u8 a7 k9 B5 P; U' ]# s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ l, x1 h' L" b% \ h
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); k3 T& h3 J3 d
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) ]9 Z- {/ X; J& w$ F
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 k( ^ L0 y0 H
7 z9 v: V) a F) k! m/* assign the tl som board LED-GPIOs*/) i! W' ^1 Y C. P& v
static const short da850_evm_tl_user_led_pins[] = {
3 b, h) i2 ^! _& z( o( R- ^3 D- X /* These pins are definition at <mach/mux.h> file */
8 L ^3 w. w- M* e5 x3 d; u DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 K- M. r" ?' _' {6 |0 l
-1
, c/ |2 p* i; ?7 x8 l" E};- Z) N6 \9 Y. i8 _
7 Q, c- z; K' |' Z0 B
static struct gpio_led da850_evm_tl_leds[] = {- d, d) _. K$ Q- g \$ ^8 m0 D- G
{, b, n, c- y" h3 X( u
.active_low = 0,
4 M. Z- [3 c7 k0 o .gpio = DA850_USER_LED0,
' y% D7 i+ C+ e: T .name = "user_led0",
3 O( V- P( `* I* x$ ^& R .default_trigger = "default-on",
0 ~+ O- \9 o. c3 d7 I0 T }, Y3 v. P7 k# w- D( I
{ I! f( z( w: `8 \6 W( ? s
.active_low = 0,
8 K8 I' {3 M# Z .gpio = DA850_USER_LED1,
* S4 @0 K v3 I/ M1 y& r; K .name = "user_led1",
( F9 ?) ^4 T! y& X K$ T+ s; H .default_trigger = "default-on",
7 r: o! S! R# H4 p% {- W },
0 X8 |$ G8 K2 o9 X" ` {$ e% }8 n* J2 L: u T* P l
.active_low = 0,/ W9 I* ^' d7 h' S' e4 O! d
.gpio = DA850_USER_LED2,
, N- @% D R% m2 m! L( z9 H .name = "user_led2",
) _6 r4 h% Q6 \$ S .default_trigger = "default-on",
3 i8 ]& ]8 _9 D4 [0 v5 e. D },1 F2 L9 g+ E3 J( X
{
' _( w# t. N* z8 u' F7 b' U .active_low = 0,
) p" d: ]# g3 D# Q7 ` .gpio = DA850_USER_LED3,
9 ?5 z- {3 j$ `% y% R0 @2 m5 h) l2 x .name = "user_led3",
$ @; w" Y3 q0 V( b1 K% z/ Y/ x .default_trigger = "default-on",: p: g- E& J* m, X$ b
},4 q! [" ^; F+ D9 t M$ B# o
};
2 V# T9 f: r0 C% [
I9 H! @" E5 i8 vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; }6 [& z1 n/ F! H .leds = da850_evm_tl_leds,
9 n5 g1 z. z/ c7 y; F. X .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 ]: y: V# I k" p2 _9 g
};
6 I5 X1 ~- A( L+ e; i! O, r: \2 a$ ?
; W C# n. _7 p% {' g& |static void led_dev_release(struct device *dev)+ y* `$ z6 ~* H7 l# T& p
{, ?7 L1 `8 q1 i- u- ]" ~
};
% k" S% K1 w- i3 ~) U5 d# G. X7 t# g$ J* d: l
static struct platform_device da850_evm_tl_leds_device = {/ b, p- [! _9 Y0 _$ i
.name = "leds-gpio",
# R8 @5 K# Q, z: j, A8 c .id = 1,8 \. @" F( |: F. V0 c5 q" x8 C% Y4 y
.dev = {
9 D) P6 A1 B9 U0 Y6 A& j .platform_data = &da850_evm_tl_leds_pdata,2 h5 ~, l: d1 W8 _ h' y/ L
.release = led_dev_release,
$ S, J @5 E8 t4 F }
- o8 X- z$ d' V* B6 |};
. _# m% [ h5 [( v- y" r& O7 X1 Z( {2 n. j8 t d2 I
static int __init led_platform_init(void); N$ s7 m- p$ v
{
0 ?4 g1 [2 ^+ p; A* c* _ int ret;
/ F6 E0 ?, J9 t- ?% f7 Y. i#if 0* L6 ~" ]' G/ i7 O, q$ k
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 p8 X7 c; E% Q: r0 ]0 Z
if (ret)
! X B5 [1 N" B+ h0 X pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) U- f$ E+ s- O' F1 ? q8 I "%d\n", ret);$ v: a: i% v9 H$ J) o
#endif
2 f2 a' T9 T. i8 Z- E' u ret = platform_device_register(&da850_evm_tl_leds_device);
& [/ R. b) x$ p2 a! H if (ret)) W6 ^% \+ @ C- Q$ @
pr_warning("Could not register som GPIO expander LEDS");& ]& M6 }0 x( L4 A, M) k U
else V8 O+ m# [) H
printk(KERN_INFO "LED register sucessful!\n");
/ \4 z% |& T& C* Q: a# t" ^8 O5 o. O$ Y2 D2 _6 C' R# f7 D
return ret;
' D% L1 @$ H8 L8 k& N9 o0 W}( k7 A# B) I/ A4 g. I1 M
* ]# f+ X# h' B+ e+ L, d5 q, D) K; B
static void __exit led_platform_exit(void): F6 _9 T5 W* \5 K) X+ E g- J9 A
{
% f$ w* t& f0 P. e" r6 p5 Q platform_device_unregister(&da850_evm_tl_leds_device);
2 T) D, Y& S3 F
" l- J. k6 \6 f/ S7 W printk(KERN_INFO "LED unregister!\n");
$ j3 s. ^/ y$ J! `" t! a! y% I}. y; U0 m; k6 v# n. n
9 D4 A6 I/ M, B8 [" I, ~
module_init(led_platform_init);
) j2 U8 U" B4 U8 }" b, I% x( ]& amodule_exit(led_platform_exit);7 F5 S! u+ A. r( N4 r4 H
% ?! G8 A9 l' M. _4 \, @4 LMODULE_DESCRIPTION("Led platform driver");
, P+ V! n7 ]' o9 IMODULE_AUTHOR("Tronlong");/ f+ C6 \! U/ e2 L' s. e F
MODULE_LICENSE("GPL");0 Q4 w5 L- \* l; C) L5 i
% `+ g9 P/ O2 [+ S6 f7 _. X' z, w
|
|