Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
63c949ea
Commit
63c949ea
authored
Aug 14, 2009
by
Ben Dooks
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'next-s3c-hwmon' into next-s3c
parents
9b71de49
bff78650
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
558 additions
and
14 deletions
+558
-14
arch/arm/mach-s3c2410/mach-bast.c
arch/arm/mach-s3c2410/mach-bast.c
+32
-0
arch/arm/plat-s3c/include/plat/adc.h
arch/arm/plat-s3c/include/plat/adc.h
+6
-2
arch/arm/plat-s3c/include/plat/devs.h
arch/arm/plat-s3c/include/plat/devs.h
+2
-0
arch/arm/plat-s3c/include/plat/hwmon.h
arch/arm/plat-s3c/include/plat/hwmon.h
+41
-0
arch/arm/plat-s3c24xx/adc.c
arch/arm/plat-s3c24xx/adc.c
+53
-11
arch/arm/plat-s3c24xx/devs.c
arch/arm/plat-s3c24xx/devs.c
+1
-1
drivers/hwmon/Kconfig
drivers/hwmon/Kconfig
+17
-0
drivers/hwmon/Makefile
drivers/hwmon/Makefile
+1
-0
drivers/hwmon/s3c-hwmon.c
drivers/hwmon/s3c-hwmon.c
+405
-0
No files found.
arch/arm/mach-s3c2410/mach-bast.c
View file @
63c949ea
...
...
@@ -45,6 +45,7 @@
#include <mach/regs-mem.h>
#include <mach/regs-lcd.h>
#include <plat/hwmon.h>
#include <plat/nand.h>
#include <plat/iic.h>
#include <mach/fb.h>
...
...
@@ -547,7 +548,35 @@ static struct i2c_board_info bast_i2c_devs[] __initdata = {
},
};
static
struct
s3c_hwmon_pdata
bast_hwmon_info
=
{
/* LCD contrast (0-6.6V) */
.
in
[
0
]
=
&
(
struct
s3c_hwmon_chcfg
)
{
.
name
=
"lcd-contrast"
,
.
mult
=
3300
,
.
div
=
512
,
},
/* LED current feedback */
.
in
[
1
]
=
&
(
struct
s3c_hwmon_chcfg
)
{
.
name
=
"led-feedback"
,
.
mult
=
3300
,
.
div
=
1024
,
},
/* LCD feedback (0-6.6V) */
.
in
[
2
]
=
&
(
struct
s3c_hwmon_chcfg
)
{
.
name
=
"lcd-feedback"
,
.
mult
=
3300
,
.
div
=
512
,
},
/* Vcore (1.8-2.0V), Vref 3.3V */
.
in
[
3
]
=
&
(
struct
s3c_hwmon_chcfg
)
{
.
name
=
"vcore"
,
.
mult
=
3300
,
.
div
=
1024
,
},
};
/* Standard BAST devices */
// cat /sys/devices/platform/s3c24xx-adc/s3c-hwmon/in_0
static
struct
platform_device
*
bast_devices
[]
__initdata
=
{
&
s3c_device_usb
,
...
...
@@ -556,6 +585,8 @@ static struct platform_device *bast_devices[] __initdata = {
&
s3c_device_i2c0
,
&
s3c_device_rtc
,
&
s3c_device_nand
,
&
s3c_device_adc
,
&
s3c_device_hwmon
,
&
bast_device_dm9k
,
&
bast_device_asix
,
&
bast_device_axpp
,
...
...
@@ -588,6 +619,7 @@ static void __init bast_map_io(void)
s3c24xx_register_clocks
(
bast_clocks
,
ARRAY_SIZE
(
bast_clocks
));
s3c_device_nand
.
dev
.
platform_data
=
&
bast_nand_info
;
s3c_device_hwmon
.
dev
.
platform_data
=
&
bast_hwmon_info
;
s3c24xx_init_io
(
bast_iodesc
,
ARRAY_SIZE
(
bast_iodesc
));
s3c24xx_init_clocks
(
0
);
...
...
arch/arm/plat-s3c/include/plat/adc.h
View file @
63c949ea
...
...
@@ -19,10 +19,14 @@ struct s3c_adc_client;
extern
int
s3c_adc_start
(
struct
s3c_adc_client
*
client
,
unsigned
int
channel
,
unsigned
int
nr_samples
);
extern
int
s3c_adc_read
(
struct
s3c_adc_client
*
client
,
unsigned
int
ch
);
extern
struct
s3c_adc_client
*
s3c_adc_register
(
struct
platform_device
*
pdev
,
void
(
*
select
)(
unsigned
selected
),
void
(
*
conv
)(
unsigned
d0
,
unsigned
d1
,
void
(
*
select
)(
struct
s3c_adc_client
*
client
,
unsigned
selected
),
void
(
*
conv
)(
struct
s3c_adc_client
*
client
,
unsigned
d0
,
unsigned
d1
,
unsigned
*
samples_left
),
unsigned
int
is_ts
);
...
...
arch/arm/plat-s3c/include/plat/devs.h
View file @
63c949ea
...
...
@@ -46,6 +46,8 @@ extern struct platform_device s3c_device_hsmmc2;
extern
struct
platform_device
s3c_device_spi0
;
extern
struct
platform_device
s3c_device_spi1
;
extern
struct
platform_device
s3c_device_hwmon
;
extern
struct
platform_device
s3c_device_nand
;
extern
struct
platform_device
s3c_device_usbgadget
;
...
...
arch/arm/plat-s3c/include/plat/hwmon.h
0 → 100644
View file @
63c949ea
/* linux/arch/arm/plat-s3c/include/plat/hwmon.h
*
* Copyright 2005 Simtec Electronics
* Ben Dooks <ben@simtec.co.uk>
* http://armlinux.simtec.co.uk/
*
* S3C - HWMon interface for ADC
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef __ASM_ARCH_ADC_HWMON_H
#define __ASM_ARCH_ADC_HWMON_H __FILE__
/**
* s3c_hwmon_chcfg - channel configuration
* @name: The name to give this channel.
* @mult: Multiply the ADC value read by this.
* @div: Divide the value from the ADC by this.
*
* The value read from the ADC is converted to a value that
* hwmon expects (mV) by result = (value_read * @mult) / @div.
*/
struct
s3c_hwmon_chcfg
{
const
char
*
name
;
unsigned
int
mult
;
unsigned
int
div
;
};
/**
* s3c_hwmon_pdata - HWMON platform data
* @in: One configuration for each possible channel used.
*/
struct
s3c_hwmon_pdata
{
struct
s3c_hwmon_chcfg
*
in
[
8
];
};
#endif
/* __ASM_ARCH_ADC_HWMON_H */
arch/arm/plat-s3c24xx/adc.c
View file @
63c949ea
...
...
@@ -39,13 +39,16 @@
struct
s3c_adc_client
{
struct
platform_device
*
pdev
;
struct
list_head
pend
;
wait_queue_head_t
*
wait
;
unsigned
int
nr_samples
;
int
result
;
unsigned
char
is_ts
;
unsigned
char
channel
;
void
(
*
select_cb
)(
unsigned
selected
);
void
(
*
convert_cb
)(
unsigned
val1
,
unsigned
val2
,
void
(
*
select_cb
)(
struct
s3c_adc_client
*
c
,
unsigned
selected
);
void
(
*
convert_cb
)(
struct
s3c_adc_client
*
c
,
unsigned
val1
,
unsigned
val2
,
unsigned
*
samples_left
);
};
...
...
@@ -81,7 +84,7 @@ static inline void s3c_adc_select(struct adc_device *adc,
{
unsigned
con
=
readl
(
adc
->
regs
+
S3C2410_ADCCON
);
client
->
select_cb
(
1
);
client
->
select_cb
(
client
,
1
);
con
&=
~
S3C2410_ADCCON_MUXMASK
;
con
&=
~
S3C2410_ADCCON_STDBM
;
...
...
@@ -153,25 +156,61 @@ int s3c_adc_start(struct s3c_adc_client *client,
}
EXPORT_SYMBOL_GPL
(
s3c_adc_start
);
static
void
s3c_adc_default_select
(
unsigned
select
)
static
void
s3c_convert_done
(
struct
s3c_adc_client
*
client
,
unsigned
v
,
unsigned
u
,
unsigned
*
left
)
{
client
->
result
=
v
;
wake_up
(
client
->
wait
);
}
int
s3c_adc_read
(
struct
s3c_adc_client
*
client
,
unsigned
int
ch
)
{
DECLARE_WAIT_QUEUE_HEAD_ONSTACK
(
wake
);
int
ret
;
client
->
convert_cb
=
s3c_convert_done
;
client
->
wait
=
&
wake
;
client
->
result
=
-
1
;
ret
=
s3c_adc_start
(
client
,
ch
,
1
);
if
(
ret
<
0
)
goto
err
;
ret
=
wait_event_timeout
(
wake
,
client
->
result
>=
0
,
HZ
/
2
);
if
(
client
->
result
<
0
)
{
ret
=
-
ETIMEDOUT
;
goto
err
;
}
client
->
convert_cb
=
NULL
;
return
client
->
result
;
err:
return
ret
;
}
EXPORT_SYMBOL_GPL
(
s3c_adc_convert
);
static
void
s3c_adc_default_select
(
struct
s3c_adc_client
*
client
,
unsigned
select
)
{
}
struct
s3c_adc_client
*
s3c_adc_register
(
struct
platform_device
*
pdev
,
void
(
*
select
)(
unsigned
int
selected
),
void
(
*
conv
)(
unsigned
d0
,
unsigned
d1
,
void
(
*
select
)(
struct
s3c_adc_client
*
client
,
unsigned
int
selected
),
void
(
*
conv
)(
struct
s3c_adc_client
*
client
,
unsigned
d0
,
unsigned
d1
,
unsigned
*
samples_left
),
unsigned
int
is_ts
)
{
struct
s3c_adc_client
*
client
;
WARN_ON
(
!
pdev
);
WARN_ON
(
!
conv
);
if
(
!
select
)
select
=
s3c_adc_default_select
;
if
(
!
conv
||
!
pdev
)
if
(
!
pdev
)
return
ERR_PTR
(
-
EINVAL
);
client
=
kzalloc
(
sizeof
(
struct
s3c_adc_client
),
GFP_KERNEL
);
...
...
@@ -230,16 +269,19 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw)
adc_dbg
(
adc
,
"read %d: 0x%04x, 0x%04x
\n
"
,
client
->
nr_samples
,
data0
,
data1
);
client
->
nr_samples
--
;
(
client
->
convert_cb
)(
data0
&
0x3ff
,
data1
&
0x3ff
,
&
client
->
nr_samples
);
if
(
client
->
convert_cb
)
(
client
->
convert_cb
)(
client
,
data0
&
0x3ff
,
data1
&
0x3ff
,
&
client
->
nr_samples
);
if
(
client
->
nr_samples
>
0
)
{
/* fire another conversion for this */
client
->
select_cb
(
1
);
client
->
select_cb
(
client
,
1
);
s3c_adc_convert
(
adc
);
}
else
{
local_irq_save
(
flags
);
(
client
->
select_cb
)(
0
);
(
client
->
select_cb
)(
client
,
0
);
adc
->
cur
=
NULL
;
s3c_adc_try
(
adc
);
...
...
arch/arm/plat-s3c24xx/devs.c
View file @
63c949ea
...
...
@@ -348,7 +348,7 @@ struct platform_device s3c_device_adc = {
/* HWMON */
struct
platform_device
s3c_device_hwmon
=
{
.
name
=
"s3c
24xx
-hwmon"
,
.
name
=
"s3c-hwmon"
,
.
id
=
-
1
,
.
dev
.
parent
=
&
s3c_device_adc
.
dev
,
};
...
...
drivers/hwmon/Kconfig
View file @
63c949ea
...
...
@@ -702,6 +702,23 @@ config SENSORS_SHT15
This driver can also be built as a module. If so, the module
will be called sht15.
config SENSORS_S3C
tristate "S3C24XX/S3C64XX Inbuilt ADC"
depends on ARCH_S3C2410 || ARCH_S3C64XX
help
If you say yes here you get support for the on-board ADCs of
the Samsung S3C24XX or S3C64XX series of SoC
This driver can also be built as a module. If so, the module
will be called s3c-hwmo.
config SENSORS_S3C_RAW
bool "Include raw channel attributes in sysfs"
depends on SENSORS_S3C
help
Say Y here if you want to include raw copies of all the ADC
channels in sysfs.
config SENSORS_SIS5595
tristate "Silicon Integrated Systems Corp. SiS5595"
depends on PCI
...
...
drivers/hwmon/Makefile
View file @
63c949ea
...
...
@@ -76,6 +76,7 @@ obj-$(CONFIG_SENSORS_MAX6650) += max6650.o
obj-$(CONFIG_SENSORS_PC87360)
+=
pc87360.o
obj-$(CONFIG_SENSORS_PC87427)
+=
pc87427.o
obj-$(CONFIG_SENSORS_PCF8591)
+=
pcf8591.o
obj-$(CONFIG_SENSORS_S3C)
+=
s3c-hwmon.o
obj-$(CONFIG_SENSORS_SHT15)
+=
sht15.o
obj-$(CONFIG_SENSORS_SIS5595)
+=
sis5595.o
obj-$(CONFIG_SENSORS_SMSC47B397)
+=
smsc47b397.o
...
...
drivers/hwmon/s3c-hwmon.c
0 → 100644
View file @
63c949ea
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment