|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! s2 T9 R+ W& g# \2 [9 c* `
#include <linux/init.h>% b4 G$ F7 }6 {+ v
#include <linux/module.h>
6 K- `0 }! p0 x; |#include <linux/kernel.h>3 L! }/ z# E9 \1 }( e5 z1 Y
#include <linux/types.h>
. B" m: w* ]# ] ~+ Z$ T5 ?#include <linux/gpio.h>* |( f4 k# J% h T8 @, V. M x
#include <linux/leds.h>8 p3 F. w8 J& p: V
#include <linux/platform_device.h>
! ?8 I5 f6 o B
# g Y7 N& ]0 K#include <asm/mach-types.h>
" R# P, ~( T- R) a6 a z' e4 t5 X#include <asm/mach/arch.h>. v9 Y. X B; c
#include <mach/da8xx.h>' X. w) M. a+ q: x+ ~6 C7 B
#include <mach/mux.h>; @7 H m* A+ q( j% V f2 x8 S
0 P/ W' H, K) t
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, v# j$ h, p) Y- l% z5 w- s% ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 o Y; ?5 Y1 T! j
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); N6 x( x, C6 d t
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% p$ e0 i% z3 |* }/ S" y( q
) Z& w* m" b$ v. A/* assign the tl som board LED-GPIOs*/
& ?& t/ E/ o+ E% ^1 Xstatic const short da850_evm_tl_user_led_pins[] = {) M+ ~" S, Y, z. E/ b* d( v7 U
/* These pins are definition at <mach/mux.h> file */& {3 A1 P. m9 Y3 K/ K) ]
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 N; `9 r4 ^3 `2 y
-16 G$ [: Z- s$ @/ b" T! b. _
};
2 ~: O( T4 Q; z: \: Z, j- N: s
5 E$ | f+ f2 _( u; `: F1 mstatic struct gpio_led da850_evm_tl_leds[] = {- X* s+ N4 [$ Y$ E7 z* _
{
" a9 V/ A" q* O7 |5 N% ?$ f .active_low = 0,
4 M6 O$ }6 Z) \$ F. E .gpio = DA850_USER_LED0,
3 l; P! m* H3 [ x/ s .name = "user_led0",
. R4 _/ s( b6 a" _6 w1 g( n .default_trigger = "default-on",
" Z5 v& G. c* v0 T1 z# Y: a" B },
! A: q7 v+ K/ c" w" _: E4 J {& W/ ~& p9 I# X: f6 |
.active_low = 0,! ~7 c9 U8 p) f* u/ D- t8 C
.gpio = DA850_USER_LED1,$ F* V6 \# v- |! k$ H" r
.name = "user_led1",
; j0 x- M$ T; Z% i9 v& A) m9 |% h) S .default_trigger = "default-on",
R7 C k$ J( ~4 _7 g },
' L7 _9 O ~5 t8 |3 B {
! d* ]( c' j; G .active_low = 0,- i! B b: d" b4 `7 X4 C! U/ ]. R5 H
.gpio = DA850_USER_LED2,. B) ?1 \8 e+ z& Q- L! z6 u
.name = "user_led2",; I" p) c) m# O9 u- a
.default_trigger = "default-on",6 t# ^. e. W+ V0 B
},6 W9 y& V6 g! }0 v% {5 R6 {
{1 e# g, Z p X4 `
.active_low = 0,
5 \7 b" \6 O6 R7 B8 m8 C .gpio = DA850_USER_LED3,
7 @* u) X( H0 i5 l- a .name = "user_led3",
# i! |* H, h& K. v4 T/ k p8 I/ n .default_trigger = "default-on",' [2 x# |. c2 I
},
( n0 G4 B9 o. w$ P};
) Q+ l4 \) }& m9 Q9 v
" d( E9 P" f* z- kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# C( h4 `) l8 H1 w .leds = da850_evm_tl_leds,% x2 P2 O, M8 Q' }% J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 }1 ~# f: |, o3 ?, O};
" c+ H) y* R" V2 L/ G) \( o! H( j/ H! t. S$ W
static void led_dev_release(struct device *dev)3 Y$ o+ M( Q* \- x9 X( r; S
{, g' H; H/ F) N
};
5 J+ K4 N: y9 R" a9 ?( |( B- A& k$ P$ u6 _
static struct platform_device da850_evm_tl_leds_device = {& w9 A% d) y3 R7 L4 \# M, a
.name = "leds-gpio", l* {' M0 J" R, c" g
.id = 1,4 B5 C/ Q! {+ [" q0 C# j
.dev = {
" T# L: v0 Z9 {* g# F5 } .platform_data = &da850_evm_tl_leds_pdata,' N0 l1 {+ j" }7 q4 s9 P3 L
.release = led_dev_release,! E. v+ `* O: e8 Q; X, j6 O( \; ]
}1 f+ K0 O9 x4 V6 n! | g
};
( w* i+ O K* \+ O
* ~* X t7 [+ c, R* M. x( Bstatic int __init led_platform_init(void)$ C5 K4 M5 Q4 h! _7 `1 y
{3 w& Y7 Z0 @( t
int ret;, `8 c# }- }9 ^, Y
#if 0
& N8 m2 A9 D3 A$ S" N ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' Q; h: C5 _; u" R# H
if (ret)3 S4 V9 A7 P* X- R
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": f$ N6 I1 v' B
"%d\n", ret);/ e& m H$ z/ u" d. d
#endif
+ K9 D. k/ i, K) d9 ^8 i7 g ret = platform_device_register(&da850_evm_tl_leds_device);. n! @* C$ E0 L* K2 s1 M5 F4 ~
if (ret)
3 @" q8 q- y1 K) m0 q pr_warning("Could not register som GPIO expander LEDS");
. |! M( }5 `5 w, U! u _ else( D- p r( d# {. W! o# [' [
printk(KERN_INFO "LED register sucessful!\n");
+ X( E# R# {1 A; F! K9 L7 {; P- l1 e* l( `% S5 ?: d9 m" `4 U# z
return ret;
' K1 t0 z# E& E6 _3 s7 H) ^6 n4 Z}
, T$ B+ H; F0 c7 a; N7 `; L, Q1 X, j
6 y3 |1 ?% M' {- astatic void __exit led_platform_exit(void)6 m9 M6 \" ?2 z9 h& p$ p
{! c& A; F" K& ^" @
platform_device_unregister(&da850_evm_tl_leds_device);
% n' r& B1 Q4 D+ { ?4 p
- L7 P/ ^2 L8 c8 f; N# U printk(KERN_INFO "LED unregister!\n");
* Y; c- L& m4 A- l$ ^+ P}
, q1 \+ U& N5 \, c" i9 I7 `" x8 _" f
module_init(led_platform_init);
5 p+ ]- O$ n. a( i# Emodule_exit(led_platform_exit);. v& Q4 `5 v+ S, h
& Q1 {& r: `; E/ t7 D% S- L( I- N
MODULE_DESCRIPTION("Led platform driver"); p5 Q# ^6 h8 K! U- {
MODULE_AUTHOR("Tronlong");5 ~2 d) `( `. l2 W W
MODULE_LICENSE("GPL");
7 J/ h7 K! o6 x) ]8 B# L$ q$ l- Q/ J. F( B
|
|