|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 ?! G- P5 a8 `#include <linux/init.h>
# G- g2 I$ H2 [* z" w; v& f% A0 t, j#include <linux/module.h>
% {, b+ S! {, n/ e- o/ O6 |#include <linux/kernel.h>
& z/ J7 T/ i+ ?! x#include <linux/types.h>1 ?* D# I% p/ p- j
#include <linux/gpio.h>
2 p z# X' a4 k0 X+ x; i#include <linux/leds.h>
+ _& Q" z6 r1 T# m. k% I0 X#include <linux/platform_device.h>& ~8 Z4 u* y5 ?
3 ?) I9 z! ]) i4 C$ G4 k#include <asm/mach-types.h>
: G$ @$ ]) F8 d4 e4 M#include <asm/mach/arch.h>' P4 ]% B2 A! d
#include <mach/da8xx.h>
1 }$ A$ z. i4 s#include <mach/mux.h>4 m( x7 F, @5 u! J r
- T6 K, R/ \5 a0 b. t7 Y" Y7 t#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 W, _2 |/ l8 {% z/ t1 B#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) x- q- S! E( h7 t) j- d+ B#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 j, h/ H, g' |' W7 }6 {1 Q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 ]4 Q% ]/ y0 i/ j8 I
8 S: k' T( z. N- W l$ H
/* assign the tl som board LED-GPIOs*/
5 y' D+ y! O- j) x" mstatic const short da850_evm_tl_user_led_pins[] = {
" U6 M# \1 Z' G2 C. z! X /* These pins are definition at <mach/mux.h> file */
, ~4 G+ v5 `: [" P( J9 | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, Y X# s/ a f# j
-1( F0 _6 a) S, p' V( f, E
};# B, @3 y" r2 @
3 r$ D7 n! {& t9 f( M. @- }) p
static struct gpio_led da850_evm_tl_leds[] = {
6 I# z4 x$ _" S$ z% _ {
2 I0 |/ j' X( f0 y7 Z7 h; |2 [; P8 @ .active_low = 0,: n. q: U1 w- x- a w4 I9 `
.gpio = DA850_USER_LED0,$ ^! r X h# P. q- ]
.name = "user_led0",
! q+ _0 S% |; P8 m" h% f. z5 `! P .default_trigger = "default-on",
" f* K! t/ b$ R( p3 X },
% W# k. g" O- v: O( S8 k8 ?9 Y% u4 e {8 c- r2 k: {3 u& [6 R! i
.active_low = 0,; T9 H9 F* p0 ?" q# Q- l) K- N9 s" j9 ?
.gpio = DA850_USER_LED1,; }$ M [; k* ?5 @& ]
.name = "user_led1",$ k7 ?( m) h# u t& L+ q
.default_trigger = "default-on",( n9 ? X. e; O5 k5 n% x8 m% H6 P
},
1 O4 N( R- s) u% y1 u$ p4 p {. y9 v v6 a( o2 L) `% p
.active_low = 0,
# L( y$ ~# o% s; @8 v% @ .gpio = DA850_USER_LED2, B: n+ V. Z% ]
.name = "user_led2",
8 i @' v/ j7 i8 h; Z .default_trigger = "default-on",
- g2 r$ x* Y( [5 { },
% l: h& U% r; \- Y1 I- A {( x' \2 d# U, W X' V* H$ _
.active_low = 0,
4 Y n3 F( B. }8 H% H) S .gpio = DA850_USER_LED3,/ v, D6 Y* Q) S. y# [
.name = "user_led3",
: A9 M* A3 w- g Y( ?% `7 `1 Z .default_trigger = "default-on",: K; m$ Q& h$ H5 q: _+ U
},
" @" k4 @& G8 I2 M( F: F% ^};
, Q+ p6 \& {& n. @- `: J6 E' m
) O' h$ L' j( y- p' Q' Dstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( T" c- J; x( B, F+ ~
.leds = da850_evm_tl_leds,' }$ l6 F6 f. k) S+ z! n
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 A7 x G$ Y5 y4 U- i- w7 x) ^2 v
};. p4 k V+ b( t- A2 s2 t& n
) B, L8 Q! d" [1 A
static void led_dev_release(struct device *dev)
. o4 J- m" R+ ^) l7 _$ }; `{
6 s! K7 p& @5 {# i- }}; p8 q. b3 V3 T) W! h$ n8 d
d- _7 @9 n9 I- c# b3 istatic struct platform_device da850_evm_tl_leds_device = {
( o ]( g3 o- J$ Z' {1 T/ z9 ~ .name = "leds-gpio",1 C+ p8 N! V, K: k& S4 d
.id = 1,( R7 X( Q2 x/ K1 e
.dev = {
6 E9 d2 R# O S | O* g' b .platform_data = &da850_evm_tl_leds_pdata,
% b. p4 p# J" z3 w .release = led_dev_release,- p2 \4 w1 u' g7 v
}
$ |" o4 v5 G6 a( Y# p};' k8 d( p3 y& \/ }' Y) f7 t' S
F" K% z( `2 J3 R* R3 t5 h* ^1 Mstatic int __init led_platform_init(void)) J5 K T- L6 C
{
: \- a5 X m# e! k0 M/ n5 P; X int ret;
& [* G. k7 P& A4 j3 M#if 0
5 D+ ^! [' d. K2 ?4 S: n ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) }4 Q0 d% q$ H, B if (ret) f- ^) P4 {7 Q7 b: F$ X
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. n2 J9 X8 Y6 j( q- k0 X "%d\n", ret);
9 s8 r3 a$ M2 }$ n. w- L#endif
, u6 M' I( [ S& S6 L1 V: l6 x+ [ ret = platform_device_register(&da850_evm_tl_leds_device);
2 A( \% X4 S c2 B* S! T if (ret)
! L ?2 h7 I, v: j0 q& Z" e+ b pr_warning("Could not register som GPIO expander LEDS");. t2 s& e) M5 W
else
$ d9 E2 _( L' T3 X+ I( s printk(KERN_INFO "LED register sucessful!\n");! B8 V4 S- K+ u+ E9 U6 G
" e& A$ O- Z- ^- h1 [4 w return ret;( H& M5 J0 ?" t! k! ]& A4 e
}( D1 H0 X0 t! }# Z9 z+ W
8 f, N2 R$ z1 x- A) t" {- x) Nstatic void __exit led_platform_exit(void)4 w$ V- p( J: [2 P; f; s# g9 [, a
{
3 V6 P# r* `8 D! _5 P: x; ?- K platform_device_unregister(&da850_evm_tl_leds_device);
; e) y7 F3 J( v: |4 z1 j6 W/ Q3 k. `; |, y) M% \( ]1 h
printk(KERN_INFO "LED unregister!\n");
/ S( j0 m6 {7 S( M) m* f}
9 _6 G9 G' p. n2 r8 O
& G2 c0 L$ C) k5 T! omodule_init(led_platform_init);
2 `% M6 B7 Y k" O" I/ xmodule_exit(led_platform_exit);
2 n. X+ K0 [# a. k/ {* I" ]* \9 }5 J$ _$ P& T
MODULE_DESCRIPTION("Led platform driver");4 m6 q4 e' N$ R' j0 {5 v w# \
MODULE_AUTHOR("Tronlong");* C) q7 n' k1 t! n' n4 k- ]$ T
MODULE_LICENSE("GPL");
2 e) c0 n3 U$ |' I6 V6 m E: H( {: o1 z, _
|
|