|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 S4 m# E; t& `: A4 L* S& c#include <linux/init.h>
; }! M2 V1 B: X4 @3 l: ?#include <linux/module.h>
* L6 U( k; E: ] d#include <linux/kernel.h>
7 e; ?- A; a+ J3 p% x#include <linux/types.h>% o6 U% b) X* W; w2 K) `
#include <linux/gpio.h>9 z+ m$ q6 l" Q( [
#include <linux/leds.h>- p5 H4 @1 x# }6 {( {7 {
#include <linux/platform_device.h># r/ p" X& b$ [4 e+ V1 @3 s- N/ o
5 M: b7 y0 ?& F+ O- l$ w# Z" F# B* ?
#include <asm/mach-types.h>- ?+ C0 }2 Y5 |5 H. Y
#include <asm/mach/arch.h>9 q# p1 S- Q' ^& b
#include <mach/da8xx.h>
; @5 W3 j: g+ b3 s#include <mach/mux.h>/ q% J9 p: I3 A% `0 _
$ ^, B. D" E, ], r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 ]$ }; u) G# Q; k) t* m. T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 `) A" ^6 f' |#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), }- Q% U9 L$ K) R5 W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 [) t8 y& D$ `' m8 |; G. x1 R! v! N) v3 r6 G* e9 }0 N4 m
/* assign the tl som board LED-GPIOs*/4 e# Y. |: B3 S9 T( ]
static const short da850_evm_tl_user_led_pins[] = {
5 V( k. v T0 `0 ` /* These pins are definition at <mach/mux.h> file */
, o5 J: F+ E' }4 a- G0 \: I DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* _# _$ y' f- j) k% p
-1
1 I/ _% A/ e9 A v \};" ^- Y4 x& [9 I& ^
5 `$ q0 f% G8 |, X2 m+ z
static struct gpio_led da850_evm_tl_leds[] = {( Z& K/ ~, a& b8 X
{) X+ l- p G1 D4 F/ r2 \
.active_low = 0,
0 q4 D P* g0 { .gpio = DA850_USER_LED0,: K* Q# A& O/ G" w
.name = "user_led0",- @. I3 }% `2 f, m
.default_trigger = "default-on",$ ^6 Y$ p( n& ^$ F$ ~* B& V
},
+ j0 L# A5 ~; { y# h {( L* C7 V+ ?% P. G
.active_low = 0,3 R, Q4 H. g9 O) } u0 L! a
.gpio = DA850_USER_LED1,
( c1 a" w' ?' b6 ~ .name = "user_led1",
! ]1 e! ?/ f- d .default_trigger = "default-on",
3 W6 ^% O; s$ [3 B3 C+ B }, I' {( o( e! _ v
{) \+ U; T: [' @
.active_low = 0,
! ~! H, T# O5 R: `) b .gpio = DA850_USER_LED2,
8 \: k* S8 j8 x* g/ ^9 k5 g3 S .name = "user_led2",
4 W( D& c& A [0 I5 U5 H+ M; d$ ] .default_trigger = "default-on",
+ c5 K9 M) m9 y. z, [, x1 m" t },$ \8 H% G4 [: o0 T7 `+ i V9 ?
{
, l3 K: {- ?( r& d: v .active_low = 0,
/ J7 C) A) _1 A2 {: H( ? .gpio = DA850_USER_LED3,3 `2 A& [+ t+ E( R: C
.name = "user_led3", V' Y4 `( \. R( l2 T9 S& b( _7 E
.default_trigger = "default-on",: h) `) ]$ V* n) f3 D# t3 o+ g6 `
},
4 Z# ~: {- g$ F; F};
/ s3 }9 A# K i* q+ R3 D! J8 ~( M4 {/ @' ?' _5 e% E0 _# r1 J! e
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 o& n/ C( G, w4 r+ E2 g .leds = da850_evm_tl_leds,. [5 U& j3 z- s/ j, ^- Z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 K! R' J3 S- F" b J6 S};! Y; ]7 c, |9 Y) q+ Y: F
5 A+ E- n( l$ C7 k2 z
static void led_dev_release(struct device *dev)
* x; U( s7 G1 \% a8 A# L, q. q{
5 T S1 Q3 |8 l2 h- T};! L U4 ]( ~, ~6 x
' v8 ?) `6 C& n8 y
static struct platform_device da850_evm_tl_leds_device = {5 I8 V& Y2 o+ k6 r8 r6 }$ d& n) X5 s6 Y
.name = "leds-gpio",
/ [) f6 o6 R; w- A6 e .id = 1,( W' c; B* n' a' s
.dev = {2 q( m" y( T7 w/ t' J! q3 F! ` k
.platform_data = &da850_evm_tl_leds_pdata,* Z4 I) _" ?0 J$ ^) ]
.release = led_dev_release,: E; ]5 X$ F: z+ S) G7 l
}: L9 ~, C: _, b( n7 K
};
. r7 m$ Q, U B4 x2 z
2 N) L5 M; h/ m# _static int __init led_platform_init(void)
9 U3 e3 o$ k+ T, `{. y8 }# a' F% B1 ], J& M
int ret;
+ s- k6 x6 E0 y9 t1 x+ N0 ~#if 09 ^' N4 X% E8 p# M5 @- B
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; V( J" c; y) @# U( g
if (ret)2 _2 D8 l" O3 h# M( q( u( J7 ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* X4 x0 z! ]% i z; s" Z
"%d\n", ret);
0 V1 w9 {0 e r3 z$ J3 K#endif$ Q( l* q8 e. c( C: y4 N2 x, p
ret = platform_device_register(&da850_evm_tl_leds_device);# p6 Y' v$ p( u1 `# [
if (ret)* C% ]8 n, u7 P3 ^3 X
pr_warning("Could not register som GPIO expander LEDS");6 s5 S1 T' ^* B6 _, m
else
: B. t' q, X1 C1 u O7 O2 S& u( ] printk(KERN_INFO "LED register sucessful!\n");
# T+ |3 K6 W5 @
+ P. d5 p5 S7 @; m: Q9 @& G" W return ret;
% ?: [/ ]/ t2 x( u3 T}
0 W7 E$ G, v5 k/ [2 t1 X8 R
( Z' A+ K+ Y9 Z) C% [' Dstatic void __exit led_platform_exit(void)# ] C, x' Q# E& e! v; X) p6 b
{
8 G7 v. g5 Y$ ^; w) a3 ^ platform_device_unregister(&da850_evm_tl_leds_device);
4 I" I5 h& y: x1 R3 L# F. d" V$ r
printk(KERN_INFO "LED unregister!\n");
% r6 H8 r' V1 t8 `4 U$ E+ O$ H}7 M& N I: K/ r) z6 J
$ f7 x: O( e+ G; hmodule_init(led_platform_init);
N9 m, ]$ ]. z Smodule_exit(led_platform_exit);
2 N4 M0 A* x X F5 A; d) {5 C, t X7 Z3 \0 f7 o
MODULE_DESCRIPTION("Led platform driver");$ a b8 @2 _- M+ R: v
MODULE_AUTHOR("Tronlong");' d C& b. B! V
MODULE_LICENSE("GPL");
6 m w% ~. Y+ C4 J9 H3 [7 V1 s, T" F' x; ?+ u
|
|