|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 d, O1 l& ~' r# n' v: r#include <linux/init.h>5 q- P9 O7 k6 h. q. ~
#include <linux/module.h>5 J7 C" b, y3 W' C' x d( ?
#include <linux/kernel.h>0 u1 r( o c7 d
#include <linux/types.h>1 V5 R7 I; i; P! N- d6 m
#include <linux/gpio.h>
: S ]2 r9 I7 g- a2 i) [- V+ w- t#include <linux/leds.h>
3 b! W" k; y O" l. S2 Y# y#include <linux/platform_device.h>; i4 U5 e' V. W! w
+ L! ], ^- V5 o6 |, q" D#include <asm/mach-types.h>* p/ G4 p/ {3 i8 E0 m- C1 A( |
#include <asm/mach/arch.h>
! f! I$ X2 r3 ~; u7 N, E; B' w& \# U#include <mach/da8xx.h>; m% W: B8 t, J1 H
#include <mach/mux.h>
+ y' o+ q$ F7 S
7 K" S a, S6 z2 D# w8 Z, v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! Z. V3 v3 x1 R. w9 Q2 L* |% I1 g#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& {+ l! o$ ?" e8 i* |0 H7 I$ T8 W
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, ]8 b" T# r2 {0 j) M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; N/ H$ }3 o/ Q; F* M3 q
; N9 W4 g& Y3 e0 ~. H* T/* assign the tl som board LED-GPIOs*/
) ~+ |/ Z C b, Kstatic const short da850_evm_tl_user_led_pins[] = {
5 S1 \4 b* ]: N5 q) I! o /* These pins are definition at <mach/mux.h> file */
. E, o8 m9 l* Y& v$ R* \( s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 \" ~* w$ K. _) z/ w1 r -1
2 W9 u. o7 @$ B};
5 h9 L( L \/ G+ R
& a0 h. D4 \3 ^static struct gpio_led da850_evm_tl_leds[] = {
l7 p6 V1 ^: U {
" Q% ~6 ?+ V) C+ M .active_low = 0,/ k8 ]+ z. u& L- R8 x0 G! j' Q
.gpio = DA850_USER_LED0,' u6 k! f) [, g
.name = "user_led0",7 v3 j+ E* r9 a# K4 G
.default_trigger = "default-on",
: w6 ?% m" K- A5 O$ \' ?1 u },) g, b+ U# {! W! v7 H. G- `, D
{& g2 l4 e: w; h* ?
.active_low = 0,
; i' L8 f- J. N! b4 N/ | .gpio = DA850_USER_LED1,# A) _% J2 g/ q
.name = "user_led1",
& D: T% A6 X9 x; y$ Y .default_trigger = "default-on",* P# A; ^+ q& R4 E8 G& M; Y/ n
},$ c& F/ V! H7 L2 [
{+ I( v9 }# R5 g7 a$ W% ?; H0 Y
.active_low = 0,% ?) V7 G4 H+ T Q1 n6 I
.gpio = DA850_USER_LED2,
+ Q. w9 \7 T: w3 s& Q .name = "user_led2",
) \8 N1 W( i; I0 {3 e7 ~# w" n .default_trigger = "default-on",
n( k3 i! n6 I% S p },
$ J" ?& [# P! t/ T# u' r {; ~- c \1 Y4 U5 ]' u0 K5 ~
.active_low = 0,
# y( A( V/ q, N+ L .gpio = DA850_USER_LED3,1 E5 |1 @: Y8 ?" M( y) S0 X: X
.name = "user_led3",
# H' U p6 L) ^ .default_trigger = "default-on",- |6 e! X3 a' V4 e3 d% Y& B
},
% k4 j" w, x# o& ^. h3 T* \};
; D. o0 v3 e% P* I; H) f. V; Z# w" c# p
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ X' i0 V+ k8 `5 e
.leds = da850_evm_tl_leds,8 O* c4 _, g. I, d' `! J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ g! p" }2 C6 ~: q
};& t, i- e- F$ w r
8 r8 D1 t' o% M* E, @9 f1 }
static void led_dev_release(struct device *dev)6 l1 T* m9 r/ z E. U* Z* |6 Z: R
{/ n$ b; D9 O( R& y
};
5 ~3 t; g7 a0 m0 e( X' P: w& [" H" a0 ]7 w7 d3 d
static struct platform_device da850_evm_tl_leds_device = {
: `0 m: c% C r! w1 j: |% ^! b .name = "leds-gpio",
% Q5 |+ d G* x .id = 1,
3 L! ?( o. |& Y# B5 S/ m: m .dev = {! |' b4 D: p S, \
.platform_data = &da850_evm_tl_leds_pdata,
& V8 |9 P- S' l .release = led_dev_release,
- y) _. H1 h* ~ }5 ?( A, F8 }2 Z# _! o
};, o' {" p0 z" F9 U2 V" V1 [
3 v' b. u% p( nstatic int __init led_platform_init(void)
. @2 x. L8 a( }' Q y0 N, d# q{
1 f8 S! r; q5 x* p; l& F- p int ret;
+ i" y" J2 r; d5 c3 P$ q) ^' i#if 0
4 r V" R) |7 h5 Q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: w+ T* c K2 K) Y7 P1 D1 ]% `
if (ret)
7 K6 ^4 ?3 x I' W9 b/ ~& S# @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 A1 T9 j, z* W$ P6 n( p# t& S2 Q' d "%d\n", ret);3 v7 r& X2 g: M: J
#endif
- N( [7 D7 m0 J9 i. A1 k ret = platform_device_register(&da850_evm_tl_leds_device);
9 l) G8 I. K" G2 q9 E2 C if (ret). U1 u% K* _8 P w* ?1 k. _3 U
pr_warning("Could not register som GPIO expander LEDS");4 E; ~1 M. r B$ v) |
else
5 L. R$ X. k" e3 I. ?- B; m6 [. d printk(KERN_INFO "LED register sucessful!\n");" ]1 c8 ^4 j( _6 ^+ [' C
* G6 ?" G1 l& J* V9 b
return ret;
- w- o0 J5 m% x: [}
; T2 z( T0 `, H1 T8 M
* f B4 |' t" a3 }3 {0 }" p$ Qstatic void __exit led_platform_exit(void)" f- r. G( k5 b4 h1 L3 k* Y8 `
{
* S' }. {/ \- V( { platform_device_unregister(&da850_evm_tl_leds_device);
" {" e, T! ?# u0 C ^5 D5 A
4 i& {8 {8 u8 B1 z: g1 }% \; V, M5 u printk(KERN_INFO "LED unregister!\n");
+ R1 C8 f! [5 H2 a/ N; Y}
3 j4 E' C' R2 V, Z" L Y
# B' e; r a6 N2 ~/ u+ {module_init(led_platform_init);
0 M' S0 `6 g! n) pmodule_exit(led_platform_exit);
q% f; r$ g. j/ x# f6 F8 F$ b0 a8 z8 \
MODULE_DESCRIPTION("Led platform driver");0 i2 c$ w7 K0 X& {0 e# O5 i) [
MODULE_AUTHOR("Tronlong");
% l4 L" v& p) k+ {& hMODULE_LICENSE("GPL");0 f" R/ }2 C+ Z Q8 a# _
7 Q/ P/ U2 j( u- Y8 }& d4 ~
|
|