|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 P) g8 `& e" c6 q% b9 I#include <linux/init.h>
3 o7 z6 Z t, ], b2 C" r5 Z" n#include <linux/module.h>& K% K3 u8 u- ~- E- L; @- v
#include <linux/kernel.h>( s( N& H3 V; x4 u/ N
#include <linux/types.h>
; X0 W0 H/ o# Z1 m: N#include <linux/gpio.h>$ @; s6 c& t4 i) N8 f* U5 m7 K
#include <linux/leds.h>' F1 p6 ]7 s G; _" g
#include <linux/platform_device.h>3 a' E5 w7 B( ]2 z
# w! M5 ?3 e9 ~+ j* b$ Z#include <asm/mach-types.h>4 f- O/ P8 y6 D6 i2 {
#include <asm/mach/arch.h>
/ i3 V1 b' P/ ]$ N ?. N#include <mach/da8xx.h>
' Q/ n* Z. M; Q" |6 ]4 y) b N#include <mach/mux.h>
/ j# _% a X: f9 k5 ]! d( a9 d' \* h4 D J- N! i; U4 {1 Y) H- a) f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 J# Q' X, `( e3 U
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ u8 @! m5 E- o4 `
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 v1 b' I; w2 }2 ]1 b#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! {- J2 u/ T. H6 f( D
# C( A0 z! h2 o) B/* assign the tl som board LED-GPIOs*/
2 `3 q# D& u+ b, m* fstatic const short da850_evm_tl_user_led_pins[] = {
4 _3 s2 z/ y5 B, T- ~3 n; H /* These pins are definition at <mach/mux.h> file */+ R/ n3 d# t+ Z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- ]) J+ |3 F; q* z) F- B7 L- x% t -1
7 [ y: F( @% ?& U M, [5 F. c/ J4 W};
L. _0 ]- H+ G, R/ w6 C0 w6 Y' o* u
static struct gpio_led da850_evm_tl_leds[] = {' d- `/ b& h8 H$ c. S/ U9 C
{
' D) H* S$ E. @+ H .active_low = 0,
2 `/ `, E. d2 \0 t .gpio = DA850_USER_LED0,% p# L5 u9 `2 S: J) O4 J: S. r
.name = "user_led0",+ H9 `4 B4 ]! i; w: u
.default_trigger = "default-on",7 n, p' m3 c9 Z
},2 C8 R9 Q @5 M& P
{7 K) C# \+ r1 R" ~& {. g
.active_low = 0,4 K1 ]. `! e$ W# Z* e3 @
.gpio = DA850_USER_LED1,
% |4 P' @8 o: ^ .name = "user_led1",! K+ B$ Z, B/ d, T6 I2 j* c9 b
.default_trigger = "default-on",* L! t% r/ M8 ~
},# [( T3 p6 k9 N+ b, I
{9 u g B/ O- L% J7 c: B
.active_low = 0,$ V5 I, {+ {- G7 v0 z9 z
.gpio = DA850_USER_LED2,
' \6 ]9 D6 x& _+ F% z .name = "user_led2",) p3 \& J `, M% P/ c1 W4 z
.default_trigger = "default-on",
2 T( ]4 t8 L4 V% N$ T3 m) g },! Z( h/ x# v$ c
{
8 U6 u. m4 J& Q+ k: Z7 } .active_low = 0,2 _8 i# _/ ?% p# b0 X [
.gpio = DA850_USER_LED3,$ n" d3 q: U" V P/ ]
.name = "user_led3",
# h0 E8 C: z P- R# F' ^ .default_trigger = "default-on",
7 ]5 S( f% T# a }, p/ m( N% C) w T+ e- O7 Y
};
, [( z, n4 Y! ]) V& n1 Z: r
4 b9 P% F3 D# Z0 x( b- i7 O( Ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 [2 L: n0 ^7 }- a/ Q- r
.leds = da850_evm_tl_leds,
" ?4 `9 i) T) Y7 q B2 a4 [# O+ K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 _8 |! b: v5 C0 _' e! G
};# E, P0 [5 k' j. A' Z3 o
/ k3 U o% t. O1 ?+ w0 h+ E
static void led_dev_release(struct device *dev)
0 ^/ K- P% [/ V5 M{
6 u q7 N: X6 ~% I5 _- b};
6 ?4 t7 z9 R% j: A
6 w0 P' j3 X/ K' H5 @7 Ostatic struct platform_device da850_evm_tl_leds_device = {
. L' W2 B) r2 K6 J4 ?! _ .name = "leds-gpio",7 ^% z4 v) `: \4 {& T
.id = 1,
4 c0 d' M0 k/ G6 R: F .dev = {
8 }/ X6 t7 X9 R' k1 P9 H .platform_data = &da850_evm_tl_leds_pdata,: M$ M6 Y: a" `1 r. z
.release = led_dev_release,
6 A% R0 J4 W$ H }
, a5 B: ^" }2 F" C};
6 J# H1 s& R% B, r& c; p0 W2 d! l1 C# R/ ~& J# W6 M! C
static int __init led_platform_init(void)
% ]" f* g$ I* f{
% H% k' w3 r( C3 |3 {& o2 { int ret;8 C2 R) N: O# H- o) M1 m1 S
#if 0
N u$ \, ?6 j" D/ L/ b ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% m4 z u. b9 q; u if (ret)
: q. P6 S" e7 _$ C: A pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 K( F9 q& l8 I4 F" B0 W& W6 F "%d\n", ret);
3 ^& h3 d l1 q" V#endif7 {$ y7 H5 `" O, @) H
ret = platform_device_register(&da850_evm_tl_leds_device);
. L9 |$ | z7 I' F if (ret)' d0 t! k1 X$ }: r; m/ Q) A; u$ z5 a
pr_warning("Could not register som GPIO expander LEDS");/ F# z( p& d# P( g& o
else
) U& A- C+ S9 Q1 {2 |: g/ W* s printk(KERN_INFO "LED register sucessful!\n");4 |, ^( p6 v7 j& k* J( o
- U4 W @; d" l* l# ` return ret;
5 Y9 o+ p% N, x8 F( N}" }( Y, \# O3 |- o
; U5 k) G7 c2 i* tstatic void __exit led_platform_exit(void); b& x# ~" t; v4 Y/ N N
{$ G1 J& L4 C5 p; S" d4 ?. r
platform_device_unregister(&da850_evm_tl_leds_device);- o% e: T2 \' \+ Y
: {. {! T! m5 J, E) H
printk(KERN_INFO "LED unregister!\n");
+ Q6 V$ ~: ^+ J}
. J& y* J. Q6 q$ k& F- p" x1 z# U
* |* R0 |& M2 ^9 smodule_init(led_platform_init);
" b0 l4 ]- w3 i$ i4 G: K% k% Umodule_exit(led_platform_exit);" ?1 H6 `0 H5 x; U) L0 r0 r
/ Z% i' y: ?. k, T5 i# N2 P+ QMODULE_DESCRIPTION("Led platform driver");6 i+ R/ e, o; \0 U$ s
MODULE_AUTHOR("Tronlong");, c7 p# a) T* B" c% `7 b4 h8 x
MODULE_LICENSE("GPL");
) l9 M' |' c( I# `$ r: ^6 |5 q/ F9 i5 R0 w) g
|
|