|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ ^; d9 X) Z! J( s3 B#include <linux/init.h>
1 h' w6 v% h: J( S! _7 o" E& I) v#include <linux/module.h>7 A3 K6 U5 s6 E9 ~; J4 m
#include <linux/kernel.h>6 l: D, c+ n& e3 z% T# \ ?
#include <linux/types.h>, {2 M0 C4 N- k( P3 v
#include <linux/gpio.h>
1 {1 W9 v5 B8 Z8 S#include <linux/leds.h>
4 H3 t+ Q# N& l E4 O! R! u' c#include <linux/platform_device.h>
- O H# y# g3 ?% Q3 [, x* w9 E% `9 x4 Y; n m) F
#include <asm/mach-types.h>+ H2 I/ F1 g" x4 X
#include <asm/mach/arch.h>1 @* J" \2 l- v! q, F; S5 l
#include <mach/da8xx.h>( P0 ]& s9 h U
#include <mach/mux.h>5 f, {0 p7 |: N9 d6 N/ s# W
" M, v# v5 k9 m' ~$ f9 Q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' C, N6 h: F i8 c9 u4 C#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) v+ v: E. ]. W: p; b4 h6 L+ W. W#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 r$ v9 n6 z6 h3 o' f Z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! Y8 r4 Z" P0 d# D o; C- S' H K
' L- F% a4 ?2 ?, o) c, f( r5 h/* assign the tl som board LED-GPIOs*/
* n9 @3 f7 p# M4 |3 P( m% astatic const short da850_evm_tl_user_led_pins[] = {
! y2 q4 @" a! g /* These pins are definition at <mach/mux.h> file */8 e, a9 m2 K" [' s6 v x8 z3 K
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 F% a' X( N! u- @
-19 [" C0 y5 \5 c2 b/ H, N* S
};
4 B6 e2 k, a: a6 A$ b" i/ O
, x2 ]9 X: m6 W5 |9 ~static struct gpio_led da850_evm_tl_leds[] = {
; v1 d3 p" L' d7 c# o& \, m {
8 { d8 P( X' x7 G; a& l% o% G .active_low = 0,! d! O6 m2 C; _4 W" c s+ f* @
.gpio = DA850_USER_LED0,
& a. h; M3 e- W( \( F .name = "user_led0",
) o8 @6 ^3 X0 K. ^2 z: b0 h+ p .default_trigger = "default-on",2 y- N0 U0 V* |1 @0 A/ [; y/ J! G
},' J9 d* K8 ?- m$ @
{
9 D9 B8 l/ `; h .active_low = 0,
/ u* {, e: l1 e# t z$ L .gpio = DA850_USER_LED1,
8 ^0 O* ~; Q5 ~# A1 T$ F .name = "user_led1",% y: m" p' z- p& K3 ^
.default_trigger = "default-on",
! _0 \5 `5 s1 l ?7 N) [ },
- N4 N& q8 a% Z4 B1 |$ z3 \ {7 x0 g) r1 |( b! K/ f
.active_low = 0,# U; |% r. W0 x) B+ ?
.gpio = DA850_USER_LED2,
* K" ]/ a/ p! |* y8 P% ] .name = "user_led2",9 A% ?9 d2 x8 i$ v
.default_trigger = "default-on",$ E( H3 b$ ~$ j! v: k( d4 f9 Z! ~0 H$ R
},
5 B8 R$ o* N# F( p# b& f, b {
. Y( ~" U7 f$ z8 [4 c" d& P/ f9 f .active_low = 0,6 b& C( K9 Z7 T$ I. `
.gpio = DA850_USER_LED3,0 y0 C) {. z) N) ~, t$ G
.name = "user_led3",
* H" f* L; ]: R/ S. q2 M! q0 h7 n .default_trigger = "default-on",) `9 X6 V: K) u/ p3 j, m. q3 T
},
" Y. h' S+ J( {8 e# I};2 D. t; Z# a8 I8 r
6 U, d% p9 g1 v3 Dstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% ]( A" q) X# [/ n, q
.leds = da850_evm_tl_leds,
$ |) V% r' W q3 g% s$ E .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) P: M1 x0 W/ F};, i p- u5 R* Z* Q; n
# j4 k+ U# ]* A6 G* Z
static void led_dev_release(struct device *dev)$ E( w- S+ I: k$ \, V7 v) y" Z* ^
{; f* A, Y" M7 ~
};: Q+ J4 d! s7 }, p- ^8 P0 w
3 P" Y6 I! e) t) nstatic struct platform_device da850_evm_tl_leds_device = {& G( A7 f9 S* ^
.name = "leds-gpio",
8 q$ u! M% k& x' j, T/ h& @ .id = 1,
7 n- D0 v8 _( a) t .dev = {/ x9 c2 b6 H! h/ _& W1 [+ l
.platform_data = &da850_evm_tl_leds_pdata,6 Y; c; I b7 I" {, g
.release = led_dev_release,5 F! C1 S. F @$ i6 \( h
}+ V; o8 w# b. ~' e& A
};
: h! |" V. w7 N
, s0 W# P7 p K9 C- ]( Qstatic int __init led_platform_init(void)
9 O8 l! |5 V) {2 A; M9 G4 {{6 V- k0 @' A `6 ?! G
int ret;
+ G: I6 z/ h* m#if 0
$ X8 W) Q2 I, N; R: ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! R- `* J- S2 |* _5 G& X* i/ a6 l
if (ret)
8 Q2 }$ _- _3 m, O% d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 a0 D4 i! U% y" y( P
"%d\n", ret);
/ W1 D7 \- W O! e- V; t#endif v, o" x p6 |; N
ret = platform_device_register(&da850_evm_tl_leds_device);
! i: p6 r4 i; s$ E if (ret)5 m5 s0 ^ A% A1 s/ v" r
pr_warning("Could not register som GPIO expander LEDS");
4 @; a- H$ V) t* M7 z else; m. h/ B6 b# [, N7 q! S
printk(KERN_INFO "LED register sucessful!\n");
% L% L( g7 o. o4 Q1 T+ W8 A! q. E0 B3 [! C) f
return ret;
! ~1 ]0 m% A ?3 x& i4 O$ X}
8 b" Q+ D4 F2 V) h |2 _. _% {, X5 f7 J) p1 M, j: G
static void __exit led_platform_exit(void)
: c( B R' T, i7 Q" o{2 }4 K' j( |( @# F# l1 Q! W
platform_device_unregister(&da850_evm_tl_leds_device);
7 z9 c0 R1 @- ]& Z! ^; M7 O+ ?. W! g. T: m; \- D0 C5 `- g/ }
printk(KERN_INFO "LED unregister!\n");
& m. d+ f! z. N2 ], P}: j% Y; d/ V" G& R8 ]1 p
8 J& D% i7 u2 o3 Bmodule_init(led_platform_init);" ?8 V+ Y/ @5 d9 _4 l% R* I
module_exit(led_platform_exit);: P( H, Y5 Q- }/ |, p0 s' N& t! H
# }. p, W4 x% b7 a/ C' C
MODULE_DESCRIPTION("Led platform driver");
# X: W; b; \ ~0 UMODULE_AUTHOR("Tronlong");/ w5 {- X9 Y* t" u9 v8 i5 [% l, C! `
MODULE_LICENSE("GPL");7 P! R3 L! s, X9 M4 e/ F
8 ]9 |# ?( I. N" q9 o9 } |
|