|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% B2 c, r6 l7 U* q; y# H4 B
#include <linux/init.h>! Z) V: }% X) L4 Q
#include <linux/module.h>
& Y* @( n W+ k#include <linux/kernel.h>
, W4 x1 n5 K+ Z o8 i3 o#include <linux/types.h> X2 S3 `, U: f/ A# z
#include <linux/gpio.h>
, k, M$ f) x7 i* X- ]#include <linux/leds.h>* M8 ?1 F/ h1 A) B$ D$ `
#include <linux/platform_device.h>
* Y) O) K/ T. C! B. C9 e& f f ?
#include <asm/mach-types.h>
) w" K* ^3 T) \4 `1 y3 C- T#include <asm/mach/arch.h>
4 T6 w# A8 l2 }- P0 R8 R#include <mach/da8xx.h>
8 O5 Y" U H" w! S3 O# |#include <mach/mux.h>
& h1 G$ T N+ q" d
$ J) x: a+ m' W2 x1 n6 o#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) {+ r- q) T9 X( q9 ]5 [* _3 t
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% o7 Z1 I, ], {( c! D/ v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ T+ D% M" \- r3 P9 a#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 x6 v! L; G* H0 Z+ G G
0 |$ ~9 q. `& n$ X, p) d
/* assign the tl som board LED-GPIOs*/: t7 ^1 M6 J* C
static const short da850_evm_tl_user_led_pins[] = {
$ c! T8 D& \* M) P' U i; [ /* These pins are definition at <mach/mux.h> file */
/ s; J! H: r4 V. V$ q, ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, B e/ P0 n) t. }9 R) a# ~, F -1
; D9 o8 o, _$ h/ N* i0 n};. m& `! R+ _. o+ @
6 r' L& O" o+ g( I' @static struct gpio_led da850_evm_tl_leds[] = {8 U$ b# t5 w! Q. e
{
/ Q# ?( K; C) ?0 C- U( u .active_low = 0,
+ E1 W* k6 W8 ]6 E9 [; G6 W .gpio = DA850_USER_LED0,0 p2 Q; |6 }9 I! P0 E5 D
.name = "user_led0",
- C3 v$ _; i2 Q1 r/ l { .default_trigger = "default-on",
6 t* u- |4 F( y" T `. v },8 s. {% W8 G* }$ J6 Z
{ C+ p C0 i+ G5 R, [
.active_low = 0,( k$ g7 r; ~5 z# x" z
.gpio = DA850_USER_LED1,
1 D- E7 L4 N& Z .name = "user_led1",
1 n6 g; R$ h7 C# K9 K .default_trigger = "default-on",
+ N+ o7 V, A4 G9 o8 \6 ` },: j4 W8 {( Z# x/ Q; V5 {; ^
{5 M- f" O- r0 T, {6 ^
.active_low = 0,% ^* K$ {& \- A$ K* j( q. m6 h- Q
.gpio = DA850_USER_LED2,; _1 V& l6 @' u
.name = "user_led2",5 @: F* w; a& b
.default_trigger = "default-on",
- K0 e. R5 N$ Y },( b w$ x) f- f( f7 W' M
{+ N- F1 a( m* {* v0 J1 Z( r
.active_low = 0,1 y- D! Q. k( @3 Z0 }; ]" U, P/ c2 g
.gpio = DA850_USER_LED3,
" r3 E0 ]. y$ G7 ^% T3 w+ m3 i .name = "user_led3",
: J$ G4 z/ x3 q2 ^9 J8 Z6 j .default_trigger = "default-on",. j6 O) x( \) S# k; P! h
},
$ F, j7 y3 t4 Z K2 Z};
m8 R9 A5 e ~' z0 r; o) x% U5 P( c0 P- C% K5 e) G+ W+ v! z$ N( k
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 ?0 W9 d' x- J- D7 K6 A, z .leds = da850_evm_tl_leds,
0 B. o- ^6 r* I$ W* d .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" w1 e. \! c; O3 u% V) ]! W};6 F9 I: ?( l0 X* I6 \
; `8 H+ X) y# y! `0 b: i, Pstatic void led_dev_release(struct device *dev)
) g% I# t* x0 ]. l, y0 c{/ a7 x% r8 P% b3 j. @3 X7 h; J: [
}; H$ W+ q" n' m3 x7 I( g6 N7 a! a
8 i x8 o) A% O- c
static struct platform_device da850_evm_tl_leds_device = {. `5 T* K$ m+ ]& t# [
.name = "leds-gpio",& @/ U* q* P. A ?- d7 h0 ]1 j
.id = 1,2 l; [0 u7 z1 J; K0 f4 z) Q
.dev = {3 l! @, V1 E3 |. z- Z# X5 j
.platform_data = &da850_evm_tl_leds_pdata,
- Y8 w7 W* X5 J .release = led_dev_release,. l4 V+ o6 V) B. E5 ] N- {
}1 M! G9 O' D. ]4 y$ p1 R) T
};
, ~1 h3 f7 t( |, S3 @1 N
. W! G- D8 S. p. T% |5 s8 wstatic int __init led_platform_init(void)& W( h" D6 p5 s2 b" R
{
2 h% R6 E6 J! F( t E0 q- B int ret;
& R+ F% }. T8 L. B. I9 X% t#if 0+ T2 ?$ H) J1 X8 u
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; c( @9 {$ K# _2 x; |
if (ret)
! W q7 M! o, u0 x0 i& H pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 ?+ x, N# D3 }8 x "%d\n", ret);" ~( c3 ^. ^( D! k
#endif
1 x* S( s" T8 C9 b) I7 P- ~ ret = platform_device_register(&da850_evm_tl_leds_device);% T+ h, I( M; J0 }1 L# M
if (ret)
1 w7 G; x' w) ]" S* R pr_warning("Could not register som GPIO expander LEDS");4 b. q$ [- c7 F. m5 g8 d6 n2 w: ]
else
* Q# ?& o- D: X9 x% G6 G printk(KERN_INFO "LED register sucessful!\n");1 Y- S8 w$ @3 \. a& |5 `
" N+ S0 |) c, E0 r9 g8 `5 t' N return ret;7 n: B- o0 Y- X* t/ {! Q
}
! v6 N- M: {' |$ N8 r. e
$ c! g3 c: t( r0 J4 b Lstatic void __exit led_platform_exit(void)
5 M% N' S1 M% R" j$ c4 S9 D{
" u# `2 ]1 I- } platform_device_unregister(&da850_evm_tl_leds_device);% }0 T$ E7 r+ l z$ h% O# C
5 B; v7 f! @( O* R/ m
printk(KERN_INFO "LED unregister!\n");
, R; B3 E- e, I6 p% J! y}' Q7 @$ M" [. t. N, [: C2 N
8 D) t4 i" u _ ]) p( Z) R
module_init(led_platform_init);
, v, r. n p6 [% Ymodule_exit(led_platform_exit);
" a' P& h& C' p6 [* Q# B8 ?6 w {1 ~0 T a
MODULE_DESCRIPTION("Led platform driver");4 ^ v) B2 C2 E8 a! Q1 p$ E; L
MODULE_AUTHOR("Tronlong");
/ X& t5 U/ `8 H* C8 c6 VMODULE_LICENSE("GPL");1 [* }+ d) u1 j1 X$ @, W: O' l
) f. S/ E: C5 l+ f0 ?
|
|