|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) t& |' ]$ j3 u/ [: A' {9 c3 G
#include <linux/init.h>, t1 a9 ~" Y* X/ i4 }
#include <linux/module.h>
/ m5 I+ U& S8 d; [- r. H#include <linux/kernel.h>) W; c( v9 U1 S# P: H8 }+ C ^
#include <linux/types.h>
1 }: |4 d( B3 e+ w3 T0 e#include <linux/gpio.h># h& J' L3 V$ c" I; l* y
#include <linux/leds.h>
" i' u, {0 ]% i7 l3 T5 U* q& u2 w" I [#include <linux/platform_device.h>! S4 l; i# j; o. }
# l) t5 M3 w+ O4 V6 O6 V
#include <asm/mach-types.h>
- P" A. _4 r" [3 z#include <asm/mach/arch.h>" k4 Y) v- k3 W0 U& I
#include <mach/da8xx.h>
, K. V% [2 w3 b& U+ ]#include <mach/mux.h>( }5 H! ?& P+ @
+ M0 r% t7 t% f; J, g6 p
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 ]( z( F* T, [; T& t6 _4 t
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) }0 H6 A3 N1 M) Z- _#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" J6 o o) ?" ]* Q6 X#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- ?5 S3 k. H$ ~$ v- f
& N5 ^* C7 A; Z. R) o& w/* assign the tl som board LED-GPIOs*/$ a: ?4 Q F/ D! v z
static const short da850_evm_tl_user_led_pins[] = {
- H: L% W; N/ T3 g /* These pins are definition at <mach/mux.h> file */
% }1 f8 C3 j- k1 D! t( C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% _2 _# R) M4 D7 C
-1
1 R5 }* A9 Y( M! a. Z7 y};
4 ?, `" [: I) q B) p5 z
1 a0 E P7 _8 nstatic struct gpio_led da850_evm_tl_leds[] = {. Y. e$ f+ e$ E, v) }% C
{
* S* `2 q$ ]4 E0 S .active_low = 0,8 X6 ~# c1 V8 E7 z
.gpio = DA850_USER_LED0,
4 H/ }" T, e! [" z .name = "user_led0",
' w1 s e8 Y( F: e2 q! S .default_trigger = "default-on",
7 ]6 s) z9 Q5 u. l: l6 _ },4 R7 a& ^7 A- s2 s. P/ P/ o5 h" ^
{
0 E5 Q4 W I o. H c .active_low = 0,
8 K* @) s, k# V6 n, Q* q .gpio = DA850_USER_LED1,) J6 a# X' I, |" m7 Z: L
.name = "user_led1",0 l8 Y: T8 D% U7 f: t. P0 R
.default_trigger = "default-on",
8 x, v% t$ b5 d) G },# @9 l9 |1 g5 N, {2 E: I
{# q" E$ c, A9 |$ E# g0 W
.active_low = 0,% s9 b4 l" `6 [/ ]
.gpio = DA850_USER_LED2,
) p, Q+ A: ?' K .name = "user_led2",
" b& x( e, I- ~. Z1 Q1 L8 ] .default_trigger = "default-on",
2 d/ |* v! ?& [$ b s },
8 a' z" W9 U( h8 ] {% w0 x1 m7 I+ k. N& W5 Z
.active_low = 0,3 J" [" W& f3 @, j0 F, x
.gpio = DA850_USER_LED3,
3 J" ` E K. } }( Q .name = "user_led3",
1 o" F$ a0 Y( [5 f3 ` .default_trigger = "default-on",
( S# `7 |, U+ t! H' z4 v6 `- v1 u1 z },
: _1 ]7 h ^6 j/ \) c};" ^9 v0 K9 c: u+ o$ x
6 u0 M5 r. Z0 Y1 Z4 sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 G+ H( f/ I1 i: |7 n" k. o: ]& W, e, e .leds = da850_evm_tl_leds,- N- Y; a( o3 j
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) h! ]7 e/ d" Q& n$ Q4 V};; D$ L; z/ u: G& T4 \1 B
5 e6 M* G& s' n+ l# T
static void led_dev_release(struct device *dev)2 o2 H i* D3 t% J, F: |
{
7 T" y: [) m) L3 ?* c1 [" }};
2 U7 T; I5 g8 s) n$ a6 G8 `9 Y) W5 l3 v, I
static struct platform_device da850_evm_tl_leds_device = {
, T( B8 W" k* L1 z; W2 f, d .name = "leds-gpio",
+ X& E$ @$ I" D6 h2 u .id = 1,9 o6 t, K4 F; T) O6 m: t8 I% v/ b' {
.dev = {4 m, c: r& e( h
.platform_data = &da850_evm_tl_leds_pdata,* g: h# \8 q, B1 @2 S8 U0 `( p
.release = led_dev_release,5 D1 k1 `; {1 |" S3 L
}
0 ]* L) G8 }* n};
2 V+ b; }4 Y) D4 M2 w( y8 r4 m) ~8 M2 {7 e. Q& s9 v# v+ R
static int __init led_platform_init(void)- {$ A, L. s! ~, s" D7 Y. b
{; N, ^/ S8 {# Y
int ret;
; t' {4 Z- c) f1 m; T9 h#if 07 u2 N9 X. M, ^' H% x8 ]# q3 w% Y+ z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ l' l1 n! U, L5 j if (ret)5 H+ D+ v6 }4 b# A& J. B. l5 e' f
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# J! q5 x( v1 L; Y8 c, u
"%d\n", ret);
# z3 W! C8 g$ U" H#endif" a1 h$ C$ m' p2 H1 G) _5 c5 f
ret = platform_device_register(&da850_evm_tl_leds_device);
) ^! S- `5 i! {; P4 \4 C+ | if (ret)) K& o- ~2 D: R7 U+ C) E. F
pr_warning("Could not register som GPIO expander LEDS");
& x" U$ d- H' e else$ ^5 r7 U+ z1 [# b% l; \; v
printk(KERN_INFO "LED register sucessful!\n");7 Z* O' X u- A2 h e. S6 N
: A; V. E3 @' Z$ b: ? return ret;0 C; W- z+ A1 g/ Y" E
}
8 P% J8 U! j" D7 f
' U4 N% Y. [6 @. S( `$ ]static void __exit led_platform_exit(void)1 H( j# r3 }; f% W' n: M
{
7 \$ L; o3 ?0 I U* s3 O platform_device_unregister(&da850_evm_tl_leds_device);
6 G1 N' Z$ i9 p8 Z+ N3 }* y5 e6 P: y
printk(KERN_INFO "LED unregister!\n");
" F- ^+ x; e: @; x}/ ]: h5 D. D- {7 n3 E6 ]
0 f; D# L$ Y7 ^) W4 u! pmodule_init(led_platform_init);
3 c, X2 t8 L+ o9 u0 Omodule_exit(led_platform_exit);5 l7 n3 M/ R4 p! G+ z$ k7 X7 [5 g* t* H
# @) \% `& j+ A) p* ^3 G2 T
MODULE_DESCRIPTION("Led platform driver");( O/ M/ j! M3 L; `' L9 i' n P
MODULE_AUTHOR("Tronlong");
) M( e; [' K5 j/ ~ TMODULE_LICENSE("GPL");, w/ X6 V; l5 |: A; i1 d
% Y$ |2 ~5 |0 n9 C4 K. T8 N4 ?
|
|