|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
' c; S& i2 I! [$ G% p#include <linux/init.h>* z7 R5 U2 E, v+ g6 k; \
#include <linux/module.h>
8 o6 m3 R$ f" z- {4 R3 w#include <linux/kernel.h>0 W% R5 k8 o) h: d1 b
#include <linux/types.h>
1 f& C2 u% H) Y1 [, s- ^' ~#include <linux/gpio.h>, U6 V; _- c0 e6 U f5 B# |. G
#include <linux/leds.h>
7 A9 k+ E" h9 e#include <linux/platform_device.h>
, I: q( E3 H$ V- j# x1 y! I' `' e- k( z" V7 `
#include <asm/mach-types.h>" x! D& H- @% ~* l; i% ?
#include <asm/mach/arch.h>
% [& _! D x, r/ B9 Y; v#include <mach/da8xx.h>" \3 N% N! {: y7 j) E" b
#include <mach/mux.h>
8 J$ w& y6 W; }6 [$ `; j8 M8 }+ M" D
- [; W4 o% A- {( p- G% P, O: f) |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; r+ a9 K! @) c/ I0 a% }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 `# G. [0 {1 I) R, H$ I3 Z! n
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# z0 O6 C! U1 H$ ?# N5 I$ S! J#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 P4 l3 \( C8 {$ p' d' v! W
! f% c7 i7 F) O3 n5 a" g/* assign the tl som board LED-GPIOs*/
# f" l4 z% S$ X/ l0 A, O( p/ lstatic const short da850_evm_tl_user_led_pins[] = {
! Z" ]/ }& c% n1 ~6 E7 I /* These pins are definition at <mach/mux.h> file */
6 P8 ^8 N9 S V7 k F' i1 K7 B( G& h DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* C) i& _$ P' u' I! f -1( K+ L6 ], p0 H: c/ I
};
# O* h4 N+ y6 c- K( _$ j, [+ p
* Q- r5 E. }9 D2 zstatic struct gpio_led da850_evm_tl_leds[] = {
2 {( _* z9 F! @/ L* i {
, L% S1 @$ @" A& R7 S4 ^ .active_low = 0,
$ w4 k5 C. @" L .gpio = DA850_USER_LED0,
: A! o& r k2 o9 i" P. L .name = "user_led0",
$ U0 l; Z1 @/ G% w5 q4 S .default_trigger = "default-on",
$ }7 X# z" `8 o# w( \8 B; c! V8 ^ }, ]" Y& F. J V, E( g
{
6 E, c5 t7 c, e: ?$ z" t! {+ s .active_low = 0,1 V6 B8 H/ H* M- y( t/ _" N; e, ^, E" G
.gpio = DA850_USER_LED1,
3 |6 ]# q. y! V0 b .name = "user_led1",
) A2 C; U2 n& u# Y. B .default_trigger = "default-on",% o; c, J9 C! O% ?0 m
},. }. I1 R: O; n7 }, ^6 n
{
$ M8 k/ S9 f+ a# m .active_low = 0,5 @9 L1 _7 V: D% e
.gpio = DA850_USER_LED2,
7 |0 D* i B& p+ N$ v3 L .name = "user_led2",) Q( D1 Q: t- q1 q5 p
.default_trigger = "default-on",, L* B y- M; X
},+ V: c) E; x& ~, ^5 n# I
{
) `; a6 N3 W3 m/ U+ T& [$ V .active_low = 0,
. I5 e/ V, J% ?" r/ h ?2 @ .gpio = DA850_USER_LED3,
/ ]: V- W2 m' r0 v1 J9 \5 y .name = "user_led3",
) i( J% ^# G" F. j. i+ v( b$ g .default_trigger = "default-on",
/ a% w. e7 k- @: W$ i },
% f% b3 l# ^7 Y: V; I1 T7 N7 _2 g4 t};
, ^1 `/ ^! w! r7 j0 Q, b H
1 p; t/ a' P9 v7 r' J# _) Kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 w) D% c3 d1 F& w .leds = da850_evm_tl_leds,
4 E9 ^- x% ]0 i1 F: q- J( J .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# I+ m1 [6 E( s( U* @( _};
' V+ P/ z1 }( S) x' I) a" c3 E! V( p) t4 K- u/ ?8 Q6 \
static void led_dev_release(struct device *dev)
8 |, g1 u+ E5 h: |( Y{: l; j8 D0 v, l
};8 q# M7 Z9 p' ^0 `
7 L* G, N! f0 n1 L, Ostatic struct platform_device da850_evm_tl_leds_device = {
9 O5 m {1 N. b .name = "leds-gpio",3 ~; \' n+ M7 \
.id = 1,
( l B* ~4 Q# h: G; o2 E- ~( g& A .dev = {4 x( h! o2 i; K0 U
.platform_data = &da850_evm_tl_leds_pdata,
. k+ W( G/ y3 } [0 C) |1 d .release = led_dev_release,9 \( j) F. c9 F7 R6 i( w8 G2 F+ N, Z
}) e- m* @, h' I) q- H6 @! L
};8 Y/ m2 L! C' ?9 V- U
g+ y- n6 L$ X: G& K2 {4 M
static int __init led_platform_init(void): r, n3 j% t X8 J" h! Z1 j- A
{# V6 M3 s6 T2 i! f t# V
int ret;
5 w: S8 W9 V4 G# Z; l. \#if 0
* I2 p( O6 o% A. {: t: T7 ~ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% V9 D6 B6 d& S7 i! ^$ g0 | if (ret)
2 R! S1 k* K& i! Y" ? pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 C$ y* l2 Y) P& x @/ h* L9 A "%d\n", ret);
% o1 |7 t- w) ]+ D& g& C1 w( i" p#endif
; d; ^6 Q9 z2 N ret = platform_device_register(&da850_evm_tl_leds_device);
# L7 s& t: C6 t5 y+ b" U% O7 t if (ret)
% c. \1 G: E+ N' ~( Y. K pr_warning("Could not register som GPIO expander LEDS");7 ~2 a* f1 M: m( q0 @: k) C. Y
else
' R* {% q, J1 S& W4 y printk(KERN_INFO "LED register sucessful!\n");
/ v5 v3 B9 w* j L2 Z' L! w; b& o. T
7 w$ t3 u" ^" I9 V8 d5 a return ret;
9 n1 b3 W! e) V, L$ F/ T0 E}
, D( r( P: |7 ~2 J7 O0 f
. \8 P6 y9 E5 N! p$ r# H0 estatic void __exit led_platform_exit(void)* k* _" @$ }+ T
{
# u5 L' f- i9 G% r1 e- W platform_device_unregister(&da850_evm_tl_leds_device);* ~& G" B x8 v: a- U7 d$ l
, w; Y4 i8 ~# |5 v printk(KERN_INFO "LED unregister!\n");
2 m! l* ^4 S" M% B* x2 S/ G$ F5 e0 I}, k3 v5 C7 M: B; y9 J2 N
$ d0 n$ E/ _% B, R/ V Imodule_init(led_platform_init);% Z7 F, p1 p$ ~# L4 ~, w3 t
module_exit(led_platform_exit);) _1 z U/ u2 K' n" R) v+ \, G
# D8 S, o7 X4 Q0 W+ M1 \
MODULE_DESCRIPTION("Led platform driver");5 @$ e: }+ l$ C% a/ m. N
MODULE_AUTHOR("Tronlong");; x9 A* Q) Z$ K. S
MODULE_LICENSE("GPL");
. c% U! ^9 \' Y6 e( X! K- u o T7 g, M5 }
|
|