|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ {& N* s% ^" p2 \
#include <linux/init.h>
# R3 d+ \# k, M9 B& w#include <linux/module.h>
/ b; {! E9 e4 j7 i#include <linux/kernel.h>
+ w% [5 L/ Y3 `- k0 h- e#include <linux/types.h># U6 ? I2 M9 S3 j5 a& {
#include <linux/gpio.h>/ y: F3 B' q: x8 } @, R& V) `
#include <linux/leds.h>
- c- P6 r5 B& M- C# y X0 R+ z2 N5 I% A#include <linux/platform_device.h>+ T% A, j0 ` F
( V _0 o& J/ X' A$ F#include <asm/mach-types.h>
* `8 k$ A! v u1 \& U+ L* ]. K" D#include <asm/mach/arch.h>. z* k- S7 A& h. X f$ a
#include <mach/da8xx.h>9 K( C* X W9 [
#include <mach/mux.h>
h& C. R1 }. G2 g% k1 O
+ C6 d S, d/ N/ ]/ ^& u% o# }#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( E8 X. e/ R3 t' I7 Y# ^9 a( W#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' H' V4 e' F4 H( {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ t& p/ S7 N+ S# c7 S( H
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, t8 D4 ]2 S( q% K5 n9 U0 H2 R5 a. t
/* assign the tl som board LED-GPIOs*/
4 O A! ^' ]# W' R9 S. |static const short da850_evm_tl_user_led_pins[] = { p6 Z6 _: w' m2 G$ f
/* These pins are definition at <mach/mux.h> file */
9 E! d4 X# f* U5 j* D. ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- U4 k: W1 ?& v8 _, a# H: C
-1, e) ?0 f* m" E
};* v6 ?7 V, b7 n" s" s( ]
4 L+ A; D) r( E) C; W2 j: }$ _static struct gpio_led da850_evm_tl_leds[] = {5 v; I0 N' C, p% _, u! g" P
{
* X {, K! q& g- @- K .active_low = 0,, D- e. r F: U! n, u
.gpio = DA850_USER_LED0,, R' }$ ~4 ?/ N2 i2 y
.name = "user_led0",
2 ~* I) a( s+ z! q .default_trigger = "default-on",
3 ~0 ^% j5 u; ~8 ]2 _( } },
L$ D# i0 L3 I* n {
$ N9 w8 E7 f0 D( J4 q- f; ~ .active_low = 0,. S/ F, ~! T/ @
.gpio = DA850_USER_LED1,! N* q6 I& c( P2 I0 c) X
.name = "user_led1",
. F. o. y, U: R E# Z& i .default_trigger = "default-on", r, m" B9 R% f4 _! p
},) ~" y, X7 Y2 {! W
{* f9 e# L. n( E' i7 y
.active_low = 0,
! e+ j+ w3 |, }' {6 T .gpio = DA850_USER_LED2,$ u3 O8 h6 ?7 s3 }( `; y
.name = "user_led2",
6 v- R4 p0 j2 {* w a# ^ .default_trigger = "default-on",6 b9 p. P8 `; x* E7 Q7 S X9 L2 G
},$ K2 \% d7 o- [6 |3 W i- u" Y; e: o* U
{
* \3 t/ W, u5 }. l6 @. I; t9 C .active_low = 0,6 ^! V3 B4 r* M; w) M4 i8 |
.gpio = DA850_USER_LED3,
( k" l. c* z/ b+ N z5 J .name = "user_led3",: d, w+ a0 a& S4 _
.default_trigger = "default-on",
/ W- |) m% |- G! ^ },! a, H- c+ m h5 N/ O1 S H; v- H
};
}" h% H+ B" D: U/ o, [
/ y! r5 O% p+ J' @& x8 Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 ?" \9 K! G. e% B6 l' G( X4 b .leds = da850_evm_tl_leds,
" W6 T/ _) v) F1 } D+ g .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! A9 W4 v8 N" I8 R% ?" T
};
6 J2 i7 p- }+ s& \) Y# T5 @
) e( p$ C7 G5 o; X* cstatic void led_dev_release(struct device *dev)
- { l6 _! d: L$ N1 g7 n# B" N. Y{
6 q6 K5 r, r( {! o9 a, o5 @};
" {) M Q A1 h1 B5 b2 ^. z( G& A
+ b$ j( h" l$ |5 y; X5 g4 fstatic struct platform_device da850_evm_tl_leds_device = {
: l1 R6 d: }1 H J2 h! b7 d .name = "leds-gpio",
/ k2 Z2 s4 b, k% j .id = 1," }/ C0 }' D2 @; y' _' B1 L$ [
.dev = {
5 K( z' v8 q( T/ z1 H9 d l .platform_data = &da850_evm_tl_leds_pdata,
) d0 B ~. X4 |+ @* @ o .release = led_dev_release,
8 x: H1 j# G( }, `% W7 }0 K, | }9 }! F8 N$ ?( r. R- G, \& f
};
3 x) }% q& ]& J/ j9 u4 a4 M" ]; U4 U% G
static int __init led_platform_init(void)$ S) C @8 u* S7 w
{
; q6 t$ ?1 L% R# k8 ]) c2 Y int ret;5 b8 J+ t- h2 a8 j
#if 0
% J4 ^1 ?9 U. b, i5 P3 M6 D9 K+ U ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 m6 f6 z5 j* ]' M- C if (ret)) T) j) i8 ?: S& u8 @1 g% N
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 T5 r( ~" ]6 x5 ^
"%d\n", ret);
: Q: w R, L( \#endif. G! o* ^$ V" f' c& Q; X# K
ret = platform_device_register(&da850_evm_tl_leds_device);" b' k; {; r- ]1 ], q B
if (ret)
2 I+ H; t- ~' b8 s6 k pr_warning("Could not register som GPIO expander LEDS");5 M( v' t) L) a) ]( C: M
else
% H% Y/ M1 P% C- S1 c' q; w printk(KERN_INFO "LED register sucessful!\n");5 O: _* w' D$ t$ k0 A
! J4 n* y$ F* T. l- o
return ret;, h3 Y! g2 s6 F. h( C% S- I/ C
}
. T5 P" H6 i4 y- ~! {1 K
) A* L% x4 S0 {' c; dstatic void __exit led_platform_exit(void)
* V) C" Z% I6 z+ @7 K{# P6 {0 x/ A- C( E
platform_device_unregister(&da850_evm_tl_leds_device);$ {' c8 i# g7 w2 f4 ~
2 b7 ?* _( A/ H printk(KERN_INFO "LED unregister!\n");6 J4 M9 V7 d8 X9 G3 X' ]- s1 x
}6 G% C. T% S4 B$ \
3 l, d b* b7 K3 K9 Cmodule_init(led_platform_init);; r9 @, F8 E, |8 o9 v; D+ M; D6 b9 o
module_exit(led_platform_exit);/ j2 \* l) g8 S7 u' Q" X( E; [7 ~
2 b' N& y: u$ t k) a! VMODULE_DESCRIPTION("Led platform driver");, o- ]8 U& ]% U1 o( u( J
MODULE_AUTHOR("Tronlong");. l$ k" c( n& y5 t
MODULE_LICENSE("GPL");/ |% O$ `8 \) R0 S7 J
- {; @9 }: U3 k+ L; P, u* t
|
|