|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 z7 d( A; { D1 b2 y#include <linux/init.h>
9 q/ n# _) K. Y- R#include <linux/module.h>
: B3 u2 v1 l: W0 }/ H#include <linux/kernel.h>8 Z/ `- u7 D& x9 N+ J
#include <linux/types.h>
2 T" L' L- E l9 i1 o$ E; X ]8 m9 c#include <linux/gpio.h>
: s+ }6 k% M0 a: @. `4 k#include <linux/leds.h>8 e: G7 I8 X8 Q! w
#include <linux/platform_device.h>7 L! x, I* ~( s. O% K
, T! @8 w! Q j& J#include <asm/mach-types.h>
: B# T1 s3 r$ _, \6 F/ q, ~#include <asm/mach/arch.h>" b+ \* ]& R$ Y; ?; m
#include <mach/da8xx.h>% B* `& q. W% i4 n
#include <mach/mux.h>
) E( s# e7 g% t: v P J7 q9 E1 S, K6 ?, U' r3 C; }
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 t' n$ q2 m9 [( L#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( G9 }8 m( f/ ]' p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, X- o9 U2 o7 M8 u, f1 J! C#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 o, A; u& ]% C& ~! u) y
- q ?9 h7 G5 n7 Q2 W" {1 _/* assign the tl som board LED-GPIOs*/
8 O! v( T! x2 U6 v8 Istatic const short da850_evm_tl_user_led_pins[] = {
% u2 l# t; m' t) x4 v /* These pins are definition at <mach/mux.h> file */8 g* r4 E/ ~ A2 v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 ?3 I9 c, s) E0 n) x
-1) n4 ] i! r2 l7 m; x; d* h
};
/ M, v% H9 k, C( R. y( u* w5 l" Q# N( r9 y6 [4 V
static struct gpio_led da850_evm_tl_leds[] = {
1 \8 k8 N% ~! G8 F' k# f {
2 p( _4 M+ X/ g5 a+ w5 G0 ` .active_low = 0,) G7 |- o6 g/ C1 @0 Z' r7 K
.gpio = DA850_USER_LED0," Q! i8 M2 ]. o% j
.name = "user_led0",# U1 U2 d5 \, l- ?' j& C
.default_trigger = "default-on",; M) i) U S1 v6 e Z
},( q2 F V7 d/ { Y# p
{
K4 p$ _8 p5 p( ` .active_low = 0,
E7 ^% r h: C3 s& ?7 s: ]9 a .gpio = DA850_USER_LED1,
z/ N% a( d# Y, I .name = "user_led1",5 r5 u* S( H( H$ t/ P. f% T$ V
.default_trigger = "default-on",
1 |# U% t2 o9 A2 K3 o6 C },
. Y2 j) x7 j; R+ P3 _ {
0 k$ [) C3 W3 p0 a( V .active_low = 0,
6 T* k- E0 v2 v. h: c" K V .gpio = DA850_USER_LED2,6 ~' X5 p4 }- t P8 l
.name = "user_led2",
9 R; ^5 g" M. `9 Z; M% C, N2 k+ t& @ .default_trigger = "default-on",, Q! B0 T2 s' S; M" P0 D
},0 E Q" z/ k( s7 X) v" z- F0 O
{. y0 f p; S" `5 `
.active_low = 0,
6 r( }2 X( a( {* ?5 T .gpio = DA850_USER_LED3,* G* p: _8 g# \; _- D+ ?
.name = "user_led3",
! H& M1 b" |( B .default_trigger = "default-on",
( B% {- A3 p3 j },
+ H7 Z- q0 l- L};
* q3 ~4 A3 u! _9 \" f h1 `$ U0 }' k e% G# `* |. i5 a7 Y! \
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& f) o" U+ f) ]1 N% z4 P9 ~
.leds = da850_evm_tl_leds,* ~. P F0 H z) N) A) U
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ }! E, [% @$ F3 o};
3 }, r6 w) B8 L# a
7 W5 ^: e: j" xstatic void led_dev_release(struct device *dev)
0 E$ K3 _; H7 g' b+ C B2 a{ _7 G- i' g- d* ]* b$ c8 D! C' F! q
};
& a: o6 p/ _% B' ]$ N. }1 H2 K+ D. I) W N
static struct platform_device da850_evm_tl_leds_device = {# A: a+ E6 ~6 k( @* F6 W
.name = "leds-gpio",
& z% t1 }, a# C4 P8 q .id = 1,
1 @3 ]% } {1 N5 k* B t .dev = {1 u, ^' ^, f9 ~
.platform_data = &da850_evm_tl_leds_pdata,+ q s- y. S0 E
.release = led_dev_release,
j6 A5 J$ Q( D+ i) f$ P: I5 _ }
& r) ], f$ W' \ Y1 X1 @5 p};* y" A( g \8 M0 B& q5 y
6 C9 x- K- b8 J6 }) y9 ~# v
static int __init led_platform_init(void)/ C' E A" U; R) Z1 i
{0 v) R' |+ L/ r$ B1 l3 R% e. X
int ret; g( ?6 m% L/ N+ F6 Q+ F3 R
#if 07 W4 _% c' f, S% X# k2 ]) Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 B: v! A* e9 \3 l9 Y; R# Y6 d
if (ret)$ V$ m( _4 X6 p8 ~9 d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") Y4 j* M* ?( q3 f8 \! g5 g
"%d\n", ret);1 _7 H1 z2 n1 c! \
#endif
3 Q1 i4 D' R5 W$ x% V# G ret = platform_device_register(&da850_evm_tl_leds_device);! k, ]& A1 R, s6 L: k6 v
if (ret)" i1 p4 ^: n. P$ t# B. t/ r3 l2 I# x
pr_warning("Could not register som GPIO expander LEDS");
8 ~9 z! n) [3 D. O4 c else* c, V- e, M' L. v& W3 b; z
printk(KERN_INFO "LED register sucessful!\n");7 c, ]1 U* h `, Y+ i6 g2 p1 s) R
2 j0 C/ ^8 E1 M" v8 X& t return ret;
; {; }3 t" `/ }/ m/ `1 K( H}$ W; L6 l; |" F4 x; ?) B
* n0 T% |4 N. M3 J, i# Kstatic void __exit led_platform_exit(void)
. G0 e5 A+ ~% v( n- _% t{
- I2 b9 r3 I& ~$ Y4 E2 O" V platform_device_unregister(&da850_evm_tl_leds_device);7 ?, P" P; T. a6 C! w! n
- i9 _, H: D- D' v6 J# ?/ F printk(KERN_INFO "LED unregister!\n");& K7 p5 A# y. E8 x# i
}6 z l. y. j6 h
4 m0 N3 t- ^7 d+ {8 ]module_init(led_platform_init);8 V/ | v& |8 U& |1 c( `
module_exit(led_platform_exit);0 h7 A6 P8 r( m, U& a
( m/ \# H* p% y* T o9 |
MODULE_DESCRIPTION("Led platform driver");
' l1 h! r W- s2 \) x' nMODULE_AUTHOR("Tronlong");- S T* ]. q( }2 ^& E/ p
MODULE_LICENSE("GPL");
% `, d& x T, f {+ a6 m, `6 Z
f( T3 o8 ?& l' b8 `* q! a) x |
|