|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 C% @* Z g' J% J
#include <linux/init.h>
4 p! C# v( h, Y a8 ]9 S" \, _' F#include <linux/module.h>
& ]: ]( h8 O' W b5 r#include <linux/kernel.h>* e+ |+ U$ h# `& K
#include <linux/types.h>, r" {" r5 P! u5 l( @! a4 q# ]/ d
#include <linux/gpio.h>
+ ?2 p" W8 f; p! H: r#include <linux/leds.h>
/ [) ~# [& E4 b7 s Y; C#include <linux/platform_device.h>
9 T1 M6 `4 H8 Y) `2 ~- o, \
7 @* o/ |2 X* I; }( ~2 P) d#include <asm/mach-types.h>) H# n' s: V8 M Q T& ^( X: P' H
#include <asm/mach/arch.h>
5 C% g2 | ]& R* i7 Y U1 D# G0 `6 ]#include <mach/da8xx.h>
6 I* B( M! r8 w$ X' ?/ Z5 D* r#include <mach/mux.h>
0 R2 o% @ T( q- F" a5 q4 C
; [6 q, Z1 F6 E x+ L: v( A1 J) l2 a#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* i, @3 m+ ?5 ^! t, u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). E' ]0 t: e6 _) Q% Y3 T/ k
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): Z! L) n8 Z$ t
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& H' A: m1 _2 g+ g2 s# @3 h$ I" i( \$ {- E4 ?) n4 ]% q1 l
/* assign the tl som board LED-GPIOs*// E8 {9 K8 A* ]3 `: V
static const short da850_evm_tl_user_led_pins[] = {- B8 V0 G0 ~( }' J0 D. c
/* These pins are definition at <mach/mux.h> file */
$ h" K" u! w: T+ ] DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 T1 j1 s" e0 W6 [& [* ?# K( _% [" e -1
: v4 N3 o: a8 A. Q2 |$ g$ s% h};
( K5 g1 J( d) T; \7 L/ V3 [" j/ H: C( q5 o- p& t
static struct gpio_led da850_evm_tl_leds[] = {4 ~/ J |* U: ]9 k' l
{
7 k7 c6 a i* Q .active_low = 0,
2 H3 W& w) j: I6 G: \# p .gpio = DA850_USER_LED0,
( v f* r; R, s9 W$ o! d# z0 ? .name = "user_led0",
& V& e$ \" i% R) Y' [( C' Q: c% u9 t .default_trigger = "default-on",
; b2 N% ^! i3 e; e% N% \ X2 X },: [2 Q' M5 X) \! W6 N
{2 _+ C5 b! d) V$ h/ ]6 p1 L
.active_low = 0,
. a/ c% h9 s$ n .gpio = DA850_USER_LED1,5 ?$ n# T) d% p( m1 c: y* L5 }0 c
.name = "user_led1",: N8 G, `5 U% `# S6 n `. U
.default_trigger = "default-on",
. F' \. c2 r7 Q },. g0 L, {; v$ H& _# p# v
{( n2 z; q0 N( L8 j& S/ c& `
.active_low = 0,
. x" L9 B0 H% A) q .gpio = DA850_USER_LED2,, [; K( |$ g% k2 s9 O- q
.name = "user_led2",5 u8 q( N2 H% M1 ?1 o. ~! o
.default_trigger = "default-on",
O& d7 c' R8 Z% P/ p1 f( ~: V },
0 c% C6 d2 L9 k {
) w& p; H. p$ w% Z6 M .active_low = 0,
3 I) p" z- a- S! P S9 ` .gpio = DA850_USER_LED3,
% p0 Z4 ~& ]! ]- D6 D( L5 N .name = "user_led3",
' ~& P5 @! O9 F, u, o .default_trigger = "default-on",
5 P& [8 Y4 G$ N- u J },1 N$ h2 }; |7 U/ u' E
};
6 z7 v; X6 h/ v: s2 r" [! T, g- @. q g
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- r/ v6 f) i7 S0 k. C8 |9 A6 q6 ? .leds = da850_evm_tl_leds,, [( g9 b6 x, j$ s) g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& j- b3 L& r/ p0 e& m1 m};
, C- H N8 w9 h0 ~0 f0 {8 v: Q" j {- D D3 m
static void led_dev_release(struct device *dev)
; |* y" j6 A% ~$ s3 `* _{
/ D) Q* g/ d3 Y# f! N7 ?};# c* q0 N1 [3 u
3 ^+ T/ H+ l* Jstatic struct platform_device da850_evm_tl_leds_device = {( }- \/ H8 J3 [2 _; L. |
.name = "leds-gpio",
% [: K6 s3 h, s/ l .id = 1,6 T2 \1 D5 U4 i" [7 s2 m; k% V5 M
.dev = {
R' f& }/ X" g) @; \9 Y% R y .platform_data = &da850_evm_tl_leds_pdata,, l* }) {% I& t) `. C( R6 s
.release = led_dev_release,9 H# d/ q5 k+ R# U
}3 x) A7 P0 c7 T
};2 g. g: N" i. e v/ y
: I- t/ z Q. L, \4 ?
static int __init led_platform_init(void)
9 h2 q" q2 P5 \4 @; ]8 t# m% H; p{
% Z6 C' {8 z# B: ]1 o int ret;9 A& X; a Z5 }9 I
#if 0
0 P& u8 v- I# w( {( u" z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# {4 S1 y" `# O) z) ~) v" }
if (ret)' U! W$ \4 H6 g0 g/ L- a2 {
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ g0 N1 F- J, p" r/ I! F2 R "%d\n", ret);
. ^; N, g+ w! ?2 e* m4 Q#endif4 }6 n( Q% y- K. ~' j0 X. n
ret = platform_device_register(&da850_evm_tl_leds_device);
0 Z4 @6 u; j9 ~. j8 z: x if (ret)
9 X; z. E Y( q+ c; M1 q5 e3 \- M pr_warning("Could not register som GPIO expander LEDS");
' f( J( c- \3 a' j( ~" v else
' s: x& D% ^' T8 j, e. T& A printk(KERN_INFO "LED register sucessful!\n");
7 V. b2 k/ @( u; W0 {5 a% G* u; l2 T, V$ D& v7 m7 u) q
return ret;
" ]; I! S x% k4 A' l; T$ \}) }2 k Y, h; ~- s& Q" P
$ Q7 i' P2 X* Hstatic void __exit led_platform_exit(void)
6 a, n% Y. b$ L( g' `, ^& G1 x{6 B& P; A2 G) G4 w
platform_device_unregister(&da850_evm_tl_leds_device);
( e8 X, ?( S6 F1 J
; e1 z; r4 D8 j/ l# L; ?. Y! c printk(KERN_INFO "LED unregister!\n");+ o. H9 m( m3 N/ i: A3 H& ~
} Q# n7 a& f7 \7 g
' @8 X& ?6 D* u6 V2 h
module_init(led_platform_init);
1 u0 Z1 Z8 A4 _& Hmodule_exit(led_platform_exit); C0 ?/ y/ f: G) k. e6 G/ C
8 l3 w' n7 s$ m+ l0 f# \
MODULE_DESCRIPTION("Led platform driver");7 M) i. `1 Z: l# i9 r
MODULE_AUTHOR("Tronlong");
2 B% s1 ?5 E4 \ G( eMODULE_LICENSE("GPL");& y) u6 M+ f$ B
: O5 P1 z2 }; {, O4 w |
|