|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- M- O |5 a% N2 E/ I, }8 x#include <linux/init.h>
0 `( u5 m" _6 z, ~5 M#include <linux/module.h>' v4 W8 W3 n- R8 H9 p
#include <linux/kernel.h>) w! f/ i# E9 n, a0 _: Z0 O# S1 x
#include <linux/types.h>9 n) g4 c+ r* d
#include <linux/gpio.h>
$ ]: Z+ M0 Z i( V#include <linux/leds.h>6 s1 L% S( m# b: |' O8 i) O# K. F
#include <linux/platform_device.h>
4 g( D F* z M9 B$ ~" ~/ l# X
% x9 r9 V7 @, c6 [; M0 e#include <asm/mach-types.h>" l) ` g& S$ w. l
#include <asm/mach/arch.h>
9 z" u& m" F" T2 L$ I#include <mach/da8xx.h>
: N( @, P3 r# o/ Z#include <mach/mux.h>
* |* z# ~# u9 p) Z5 e+ O0 y5 d/ y6 U: ]) N: ^; K
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 F! Q R8 N$ t; F- P; }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): ]) F* [, L, H H
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 T( @# e3 K6 N0 p#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! l! M } F" o7 |4 C0 g
( ~9 r0 G T/ z c `
/* assign the tl som board LED-GPIOs*/
% ^/ @8 y2 q* Z( X( {6 W* estatic const short da850_evm_tl_user_led_pins[] = {
" A; k' O. g4 x6 V0 ?+ y+ D /* These pins are definition at <mach/mux.h> file */6 ^/ M }: ]- h) K
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ V9 @5 k. Y! R1 t: \ Q. {0 w
-1) ~ H0 n# Y4 s. G3 x
};
% M% T1 I% L, {5 O' M, @
& v7 G7 x8 I Z W) w8 W4 I% K0 mstatic struct gpio_led da850_evm_tl_leds[] = {
, n8 d' O \) r( e8 W# c3 Z4 `, C* A {
3 T3 u" G( R2 j0 E3 _8 n9 w .active_low = 0,& {! \+ V6 u" O: \ z2 K
.gpio = DA850_USER_LED0,2 V. V5 x: i7 a7 a$ \, |) F2 J
.name = "user_led0",$ @9 Q0 N0 o) j+ {) w7 S" e( L2 T# d
.default_trigger = "default-on",* W/ o% L, \, F l
},- r3 P, S- s8 V# o5 `. {
{
, I! k2 c3 |; V& p! M- |/ L" F .active_low = 0,
% M. x" v6 a8 B- u .gpio = DA850_USER_LED1,
7 e/ b2 X' R) d0 a3 _: _# q" D$ M .name = "user_led1",
4 E, o# r4 U, M. U .default_trigger = "default-on",
$ ?- A6 R6 z3 a7 i$ F3 o },
6 ^ _+ v0 ]2 O/ j! T q$ U' f {
' k0 L3 H& I- D Z$ N% O* ` .active_low = 0,$ D8 @7 t1 `. n% V+ W. Z2 s
.gpio = DA850_USER_LED2,3 |* i8 ?& E z+ D4 @
.name = "user_led2",
* {; X' G7 b1 r6 m6 S0 l8 n .default_trigger = "default-on",) x9 a+ e( o. F* `& r. g# R8 h
},
; O/ M" M1 ?- k. c1 _ {
& T% j5 N s' U( h$ O4 n0 F9 U .active_low = 0,0 |. j) ?( U, n9 b- c G3 l" x! C- u
.gpio = DA850_USER_LED3,
: \9 C% s o) d# h0 [+ m6 z: X% u .name = "user_led3",
6 w" \! u& y0 H) Y; z, | \ .default_trigger = "default-on",9 n! u% y" g" L
},& C4 ]5 t5 C2 Z- b8 ^' Y, |: C6 D" D
};8 J$ D/ O; n2 ]3 E, n! [+ |
. ^& D' z- @; T: o1 g
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. W; v, N9 p/ F/ d" c7 B
.leds = da850_evm_tl_leds,& G8 E$ Y; f( r A( ]" r3 }
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 s# ]; @0 V7 r
};
3 Z1 o1 G. f9 z+ t& z$ U
" q. ^! l% r8 b$ z p estatic void led_dev_release(struct device *dev)
& x, z# A0 ^( n. H0 u. m{: I& s: P" \5 f( ]5 [
};
9 |5 g8 h" R/ l& v: k
- w! Z% v# `1 p1 ?" Ustatic struct platform_device da850_evm_tl_leds_device = {
4 L+ ?0 M4 _; X8 \/ i( |5 z .name = "leds-gpio",
' w B; F) U+ _7 @# Q, Z .id = 1,5 K& J: K$ f8 ~- v: m
.dev = {9 B/ |! ?& ]2 z. d
.platform_data = &da850_evm_tl_leds_pdata,
, E1 G! y+ ^% I) ]6 p- d2 D( s. ^ .release = led_dev_release,
: E6 D: u- X7 y; W }
3 o9 ]2 s8 G& x};
& F, w' Z8 [( K0 c' ?8 W( g6 p W% q2 @
static int __init led_platform_init(void)1 X7 l4 _# ^& \3 E
{
7 |; t4 `2 ?- t0 K int ret;
7 g$ w1 p; `) t7 J3 {/ P# B#if 0
. X. S/ p I! O7 [0 K6 Z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* }7 `& K! d/ B# g if (ret). l& v$ W( O5 j) K+ m$ {: G
pr_warning("da850_evm_tl_leds_init : User LED mux failed :" B' c, a k% s/ O$ `& \
"%d\n", ret);
2 \2 ^7 Q$ O7 x#endif
+ N/ J0 |: o% ^5 R$ Z) p8 l ~ ret = platform_device_register(&da850_evm_tl_leds_device);- d! }6 y: f6 ^5 G
if (ret)$ \! A7 P- J$ m4 g: \
pr_warning("Could not register som GPIO expander LEDS");
0 m, Q* Q2 j @9 F; q else
5 @7 f" v% G# n# ]6 k" d& J1 b! M% ? printk(KERN_INFO "LED register sucessful!\n");
! V4 {5 b8 C; a, P: }" m0 S! w, t4 w& n; }1 A2 m
return ret;
* ]2 y* [, t ?5 a) m}2 N4 G- B6 c# z" ?+ ~: v, v
m' \6 ?* D% \9 K) P8 \
static void __exit led_platform_exit(void)
6 ?! R; a. o7 Z' @2 L1 x% v; D8 q* @' j{1 I: n+ V& _% s
platform_device_unregister(&da850_evm_tl_leds_device);
8 V) y. F6 x+ \3 V: C7 x1 { W& s3 ]" F1 X n
printk(KERN_INFO "LED unregister!\n");
$ y" n+ k( n# o+ x o}4 L/ O& y: ^0 ]$ a, T9 X
b+ C: g. m$ Q2 Pmodule_init(led_platform_init);
9 @ Y+ T$ A2 ?4 ]$ Imodule_exit(led_platform_exit);/ w! p2 d/ _- N: w0 t
; c F6 m' U. N9 i1 Q
MODULE_DESCRIPTION("Led platform driver");
% t g2 D7 o7 Y9 g, D- PMODULE_AUTHOR("Tronlong");7 I4 }" @0 w* @0 x, }% p
MODULE_LICENSE("GPL");
3 C1 c9 z" V% W) M* ~/ \; \+ h$ n6 j8 [& p0 I
|
|