ARM: s3c: remove s3c24xx specific hacks
A number of device drivers reference CONFIG_ARM_S3C24XX_CPUFREQ or similar symbols that are no longer available with the platform gone, though the drivers themselves are still used on newer platforms, so remove these hacks. Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Acked-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> Acked-by: Miquel Raynal <miquel.raynal@bootlin.com> Acked-by: Ulf Hansson <ulf.hansson@linaro.org> Acked-by: Stephen Boyd <sboyd@kernel.org> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
parent
61b7f8920b
commit
1ea35b3557
28 changed files with 29 additions and 614 deletions
|
@ -28,16 +28,6 @@
|
||||||
and \rd, \rd, #S3C2410_UFSTAT_TXMASK
|
and \rd, \rd, #S3C2410_UFSTAT_TXMASK
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
/* Select the correct implementation depending on the configuration. The
|
|
||||||
* S3C2440 will get selected by default, as these are the most widely
|
|
||||||
* used variants of these
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(CONFIG_DEBUG_S3C2410_UART)
|
|
||||||
#define fifo_full fifo_full_s3c2410
|
|
||||||
#define fifo_level fifo_level_s3c2410
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* include the reset of the code which will do the work */
|
/* include the reset of the code which will do the work */
|
||||||
|
|
||||||
#include <debug/samsung.S>
|
#include <debug/samsung.S>
|
||||||
|
|
|
@ -2,9 +2,7 @@
|
||||||
#
|
#
|
||||||
# Copyright 2009 Simtec Electronics
|
# Copyright 2009 Simtec Electronics
|
||||||
|
|
||||||
ifdef CONFIG_ARCH_S3C64XX
|
|
||||||
include $(src)/Makefile.s3c64xx
|
include $(src)/Makefile.s3c64xx
|
||||||
endif
|
|
||||||
|
|
||||||
# Objects we always build independent of SoC choice
|
# Objects we always build independent of SoC choice
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
#include <linux/sizes.h>
|
#include <linux/sizes.h>
|
||||||
#include <linux/platform_data/s3c-hsudc.h>
|
#include <linux/platform_data/s3c-hsudc.h>
|
||||||
#include <linux/platform_data/s3c-hsotg.h>
|
#include <linux/platform_data/s3c-hsotg.h>
|
||||||
#include <linux/platform_data/dma-s3c24xx.h>
|
|
||||||
|
|
||||||
#include <linux/platform_data/media/s5p_hdmi.h>
|
#include <linux/platform_data/media/s5p_hdmi.h>
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,2 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C24XX
|
|
||||||
#include "dma-s3c24xx.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C64XX
|
|
||||||
#include "dma-s3c64xx.h"
|
#include "dma-s3c64xx.h"
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,9 +1,2 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C24XX
|
|
||||||
#include "gpio-samsung-s3c24xx.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C64XX
|
|
||||||
#include "gpio-samsung-s3c64xx.h"
|
#include "gpio-samsung-s3c64xx.h"
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,9 +1,2 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C24XX
|
|
||||||
#include "irqs-s3c24xx.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C64XX
|
|
||||||
#include "irqs-s3c64xx.h"
|
#include "irqs-s3c64xx.h"
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,9 +1,2 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C24XX
|
|
||||||
#include "map-s3c24xx.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C64XX
|
|
||||||
#include "map-s3c64xx.h"
|
#include "map-s3c64xx.h"
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,9 +1,2 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C24XX
|
|
||||||
#include "pm-core-s3c24xx.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C64XX
|
|
||||||
#include "pm-core-s3c64xx.h"
|
#include "pm-core-s3c64xx.h"
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,9 +1,2 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C24XX
|
|
||||||
#include "regs-clock-s3c24xx.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C64XX
|
|
||||||
#include "regs-clock-s3c64xx.h"
|
#include "regs-clock-s3c64xx.h"
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,9 +1,2 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C24XX
|
|
||||||
#include "regs-gpio-s3c24xx.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C64XX
|
|
||||||
#include "regs-gpio-s3c64xx.h"
|
#include "regs-gpio-s3c64xx.h"
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,9 +1,2 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C24XX
|
|
||||||
#include "regs-irq-s3c24xx.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C64XX
|
|
||||||
#include "regs-irq-s3c64xx.h"
|
#include "regs-irq-s3c64xx.h"
|
||||||
#endif
|
|
||||||
|
|
|
@ -441,7 +441,7 @@ config CLKSRC_EXYNOS_MCT
|
||||||
config CLKSRC_SAMSUNG_PWM
|
config CLKSRC_SAMSUNG_PWM
|
||||||
bool "PWM timer driver for Samsung S3C, S5P" if COMPILE_TEST
|
bool "PWM timer driver for Samsung S3C, S5P" if COMPILE_TEST
|
||||||
depends on HAS_IOMEM
|
depends on HAS_IOMEM
|
||||||
depends on ARCH_EXYNOS || ARCH_S3C24XX || ARCH_S3C64XX || ARCH_S5PV210 || COMPILE_TEST
|
depends on ARCH_EXYNOS || ARCH_S3C64XX || ARCH_S5PV210 || COMPILE_TEST
|
||||||
help
|
help
|
||||||
This is a new clocksource driver for the PWM timer found in
|
This is a new clocksource driver for the PWM timer found in
|
||||||
Samsung S3C, S5P and Exynos SoCs, replacing an earlier driver
|
Samsung S3C, S5P and Exynos SoCs, replacing an earlier driver
|
||||||
|
|
|
@ -1010,8 +1010,7 @@ config I2C_RZV2M
|
||||||
|
|
||||||
config I2C_S3C2410
|
config I2C_S3C2410
|
||||||
tristate "S3C/Exynos I2C Driver"
|
tristate "S3C/Exynos I2C Driver"
|
||||||
depends on ARCH_EXYNOS || ARCH_S3C24XX || ARCH_S3C64XX || \
|
depends on ARCH_EXYNOS || ARCH_S3C64XX || ARCH_S5PV210 || COMPILE_TEST
|
||||||
ARCH_S5PV210 || COMPILE_TEST
|
|
||||||
help
|
help
|
||||||
Say Y here to include support for I2C controller in the
|
Say Y here to include support for I2C controller in the
|
||||||
Samsung SoCs (S3C, S5Pv210, Exynos).
|
Samsung SoCs (S3C, S5Pv210, Exynos).
|
||||||
|
|
|
@ -116,9 +116,6 @@ struct s3c24xx_i2c {
|
||||||
struct s3c2410_platform_i2c *pdata;
|
struct s3c2410_platform_i2c *pdata;
|
||||||
struct gpio_desc *gpios[2];
|
struct gpio_desc *gpios[2];
|
||||||
struct pinctrl *pctrl;
|
struct pinctrl *pctrl;
|
||||||
#if defined(CONFIG_ARM_S3C24XX_CPUFREQ)
|
|
||||||
struct notifier_block freq_transition;
|
|
||||||
#endif
|
|
||||||
struct regmap *sysreg;
|
struct regmap *sysreg;
|
||||||
unsigned int sys_i2c_cfg;
|
unsigned int sys_i2c_cfg;
|
||||||
};
|
};
|
||||||
|
@ -885,65 +882,6 @@ static int s3c24xx_i2c_clockrate(struct s3c24xx_i2c *i2c, unsigned int *got)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_ARM_S3C24XX_CPUFREQ)
|
|
||||||
|
|
||||||
#define freq_to_i2c(_n) container_of(_n, struct s3c24xx_i2c, freq_transition)
|
|
||||||
|
|
||||||
static int s3c24xx_i2c_cpufreq_transition(struct notifier_block *nb,
|
|
||||||
unsigned long val, void *data)
|
|
||||||
{
|
|
||||||
struct s3c24xx_i2c *i2c = freq_to_i2c(nb);
|
|
||||||
unsigned int got;
|
|
||||||
int delta_f;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
delta_f = clk_get_rate(i2c->clk) - i2c->clkrate;
|
|
||||||
|
|
||||||
/* if we're post-change and the input clock has slowed down
|
|
||||||
* or at pre-change and the clock is about to speed up, then
|
|
||||||
* adjust our clock rate. <0 is slow, >0 speedup.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((val == CPUFREQ_POSTCHANGE && delta_f < 0) ||
|
|
||||||
(val == CPUFREQ_PRECHANGE && delta_f > 0)) {
|
|
||||||
i2c_lock_bus(&i2c->adap, I2C_LOCK_ROOT_ADAPTER);
|
|
||||||
ret = s3c24xx_i2c_clockrate(i2c, &got);
|
|
||||||
i2c_unlock_bus(&i2c->adap, I2C_LOCK_ROOT_ADAPTER);
|
|
||||||
|
|
||||||
if (ret < 0)
|
|
||||||
dev_err(i2c->dev, "cannot find frequency (%d)\n", ret);
|
|
||||||
else
|
|
||||||
dev_info(i2c->dev, "setting freq %d\n", got);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int s3c24xx_i2c_register_cpufreq(struct s3c24xx_i2c *i2c)
|
|
||||||
{
|
|
||||||
i2c->freq_transition.notifier_call = s3c24xx_i2c_cpufreq_transition;
|
|
||||||
|
|
||||||
return cpufreq_register_notifier(&i2c->freq_transition,
|
|
||||||
CPUFREQ_TRANSITION_NOTIFIER);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void s3c24xx_i2c_deregister_cpufreq(struct s3c24xx_i2c *i2c)
|
|
||||||
{
|
|
||||||
cpufreq_unregister_notifier(&i2c->freq_transition,
|
|
||||||
CPUFREQ_TRANSITION_NOTIFIER);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
static inline int s3c24xx_i2c_register_cpufreq(struct s3c24xx_i2c *i2c)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void s3c24xx_i2c_deregister_cpufreq(struct s3c24xx_i2c *i2c)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
static int s3c24xx_i2c_parse_dt_gpio(struct s3c24xx_i2c *i2c)
|
static int s3c24xx_i2c_parse_dt_gpio(struct s3c24xx_i2c *i2c)
|
||||||
{
|
{
|
||||||
|
@ -1152,13 +1090,6 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = s3c24xx_i2c_register_cpufreq(i2c);
|
|
||||||
if (ret < 0) {
|
|
||||||
dev_err(&pdev->dev, "failed to register cpufreq notifier\n");
|
|
||||||
clk_unprepare(i2c->clk);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note, previous versions of the driver used i2c_add_adapter()
|
* Note, previous versions of the driver used i2c_add_adapter()
|
||||||
* to add the bus at any number. We now pass the bus number via
|
* to add the bus at any number. We now pass the bus number via
|
||||||
|
@ -1175,7 +1106,6 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev)
|
||||||
ret = i2c_add_numbered_adapter(&i2c->adap);
|
ret = i2c_add_numbered_adapter(&i2c->adap);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
pm_runtime_disable(&pdev->dev);
|
pm_runtime_disable(&pdev->dev);
|
||||||
s3c24xx_i2c_deregister_cpufreq(i2c);
|
|
||||||
clk_unprepare(i2c->clk);
|
clk_unprepare(i2c->clk);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1192,8 +1122,6 @@ static int s3c24xx_i2c_remove(struct platform_device *pdev)
|
||||||
|
|
||||||
pm_runtime_disable(&pdev->dev);
|
pm_runtime_disable(&pdev->dev);
|
||||||
|
|
||||||
s3c24xx_i2c_deregister_cpufreq(i2c);
|
|
||||||
|
|
||||||
i2c_del_adapter(&i2c->adap);
|
i2c_del_adapter(&i2c->adap);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -452,11 +452,11 @@ config EP93XX_ADC
|
||||||
|
|
||||||
config EXYNOS_ADC
|
config EXYNOS_ADC
|
||||||
tristate "Exynos ADC driver support"
|
tristate "Exynos ADC driver support"
|
||||||
depends on ARCH_EXYNOS || ARCH_S3C24XX || ARCH_S3C64XX || ARCH_S5PV210 || (OF && COMPILE_TEST)
|
depends on ARCH_EXYNOS || ARCH_S3C64XX || ARCH_S5PV210 || (OF && COMPILE_TEST)
|
||||||
depends on HAS_IOMEM
|
depends on HAS_IOMEM
|
||||||
help
|
help
|
||||||
Driver for the ADC block found in the Samsung S3C (S3C2410, S3C2416,
|
Driver for the ADC block found in the Samsung S3C6410, S5Pv210 and
|
||||||
S3C2440, S3C2443, S3C6410), S5Pv210 and Exynos SoCs.
|
Exynos SoCs.
|
||||||
Choose Y here only if you build for such Samsung SoC.
|
Choose Y here only if you build for such Samsung SoC.
|
||||||
|
|
||||||
To compile this driver as a module, choose M here: the module will be
|
To compile this driver as a module, choose M here: the module will be
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
config VIDEO_S3C_CAMIF
|
config VIDEO_S3C_CAMIF
|
||||||
tristate "Samsung S3C24XX/S3C64XX SoC Camera Interface driver"
|
tristate "Samsung 3C64XX SoC Camera Interface driver"
|
||||||
depends on V4L_PLATFORM_DRIVERS
|
depends on V4L_PLATFORM_DRIVERS
|
||||||
depends on VIDEO_DEV && I2C && PM
|
depends on VIDEO_DEV && I2C && PM
|
||||||
depends on ARCH_S3C64XX || PLAT_S3C24XX || COMPILE_TEST
|
depends on ARCH_S3C64XX || COMPILE_TEST
|
||||||
select MEDIA_CONTROLLER
|
select MEDIA_CONTROLLER
|
||||||
select VIDEO_V4L2_SUBDEV_API
|
select VIDEO_V4L2_SUBDEV_API
|
||||||
select VIDEOBUF2_DMA_CONTIG
|
select VIDEOBUF2_DMA_CONTIG
|
||||||
help
|
help
|
||||||
This is a v4l2 driver for s3c24xx and s3c64xx SoC series camera
|
This is a v4l2 driver for s3c64xx SoC series camera host interface
|
||||||
host interface (CAMIF).
|
(CAMIF).
|
||||||
|
|
||||||
To compile this driver as a module, choose M here: the module
|
To compile this driver as a module, choose M here: the module
|
||||||
will be called s3c-camif.
|
will be called s3c-camif.
|
||||||
|
|
|
@ -321,9 +321,8 @@ config MMC_SDHCI_S3C
|
||||||
depends on PLAT_SAMSUNG || ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
|
depends on PLAT_SAMSUNG || ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
|
||||||
help
|
help
|
||||||
This selects the Secure Digital Host Controller Interface (SDHCI)
|
This selects the Secure Digital Host Controller Interface (SDHCI)
|
||||||
often referrered to as the HSMMC block in some of the Samsung S3C
|
often referrered to as the HSMMC block in some of the Samsung
|
||||||
(S3C2416, S3C2443, S3C6410), S5Pv210 and Exynos (Exynso4210,
|
S3C6410, S5Pv210 and Exynos (Exynso4210, Exynos4412) SoCs.
|
||||||
Exynos4412) SoCs.
|
|
||||||
|
|
||||||
If you have a controller with this interface (thereforeyou build for
|
If you have a controller with this interface (thereforeyou build for
|
||||||
such Samsung SoC), say Y or M here.
|
such Samsung SoC), say Y or M here.
|
||||||
|
|
|
@ -79,7 +79,7 @@ config MTD_NAND_NDFC
|
||||||
|
|
||||||
config MTD_NAND_S3C2410
|
config MTD_NAND_S3C2410
|
||||||
tristate "Samsung S3C NAND controller"
|
tristate "Samsung S3C NAND controller"
|
||||||
depends on ARCH_S3C24XX || ARCH_S3C64XX
|
depends on ARCH_S3C64XX
|
||||||
help
|
help
|
||||||
This enables the NAND flash controller on the S3C24xx and S3C64xx
|
This enables the NAND flash controller on the S3C24xx and S3C64xx
|
||||||
SoCs
|
SoCs
|
||||||
|
|
|
@ -166,10 +166,6 @@ struct s3c2410_nand_info {
|
||||||
enum s3c_nand_clk_state clk_state;
|
enum s3c_nand_clk_state clk_state;
|
||||||
|
|
||||||
enum s3c_cpu_type cpu_type;
|
enum s3c_cpu_type cpu_type;
|
||||||
|
|
||||||
#ifdef CONFIG_ARM_S3C24XX_CPUFREQ
|
|
||||||
struct notifier_block freq_transition;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct s3c24XX_nand_devtype_data {
|
struct s3c24XX_nand_devtype_data {
|
||||||
|
@ -711,54 +707,6 @@ static void s3c2440_nand_write_buf(struct nand_chip *this, const u_char *buf,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* cpufreq driver support */
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARM_S3C24XX_CPUFREQ
|
|
||||||
|
|
||||||
static int s3c2410_nand_cpufreq_transition(struct notifier_block *nb,
|
|
||||||
unsigned long val, void *data)
|
|
||||||
{
|
|
||||||
struct s3c2410_nand_info *info;
|
|
||||||
unsigned long newclk;
|
|
||||||
|
|
||||||
info = container_of(nb, struct s3c2410_nand_info, freq_transition);
|
|
||||||
newclk = clk_get_rate(info->clk);
|
|
||||||
|
|
||||||
if ((val == CPUFREQ_POSTCHANGE && newclk < info->clk_rate) ||
|
|
||||||
(val == CPUFREQ_PRECHANGE && newclk > info->clk_rate)) {
|
|
||||||
s3c2410_nand_setrate(info);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int s3c2410_nand_cpufreq_register(struct s3c2410_nand_info *info)
|
|
||||||
{
|
|
||||||
info->freq_transition.notifier_call = s3c2410_nand_cpufreq_transition;
|
|
||||||
|
|
||||||
return cpufreq_register_notifier(&info->freq_transition,
|
|
||||||
CPUFREQ_TRANSITION_NOTIFIER);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
s3c2410_nand_cpufreq_deregister(struct s3c2410_nand_info *info)
|
|
||||||
{
|
|
||||||
cpufreq_unregister_notifier(&info->freq_transition,
|
|
||||||
CPUFREQ_TRANSITION_NOTIFIER);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
static inline int s3c2410_nand_cpufreq_register(struct s3c2410_nand_info *info)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
s3c2410_nand_cpufreq_deregister(struct s3c2410_nand_info *info)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* device management functions */
|
/* device management functions */
|
||||||
|
|
||||||
static int s3c24xx_nand_remove(struct platform_device *pdev)
|
static int s3c24xx_nand_remove(struct platform_device *pdev)
|
||||||
|
@ -768,8 +716,6 @@ static int s3c24xx_nand_remove(struct platform_device *pdev)
|
||||||
if (info == NULL)
|
if (info == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
s3c2410_nand_cpufreq_deregister(info);
|
|
||||||
|
|
||||||
/* Release all our mtds and their partitions, then go through
|
/* Release all our mtds and their partitions, then go through
|
||||||
* freeing the resources used
|
* freeing the resources used
|
||||||
*/
|
*/
|
||||||
|
@ -1184,12 +1130,6 @@ static int s3c24xx_nand_probe(struct platform_device *pdev)
|
||||||
if (err != 0)
|
if (err != 0)
|
||||||
goto exit_error;
|
goto exit_error;
|
||||||
|
|
||||||
err = s3c2410_nand_cpufreq_register(info);
|
|
||||||
if (err < 0) {
|
|
||||||
dev_err(&pdev->dev, "failed to init cpufreq support\n");
|
|
||||||
goto exit_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (allow_clk_suspend(info)) {
|
if (allow_clk_suspend(info)) {
|
||||||
dev_info(&pdev->dev, "clock idle support enabled\n");
|
dev_info(&pdev->dev, "clock idle support enabled\n");
|
||||||
s3c2410_nand_clk_set_state(info, CLOCK_SUSPEND);
|
s3c2410_nand_clk_set_state(info, CLOCK_SUSPEND);
|
||||||
|
|
|
@ -1323,16 +1323,6 @@ static const struct of_device_id samsung_pinctrl_dt_match[] = {
|
||||||
#ifdef CONFIG_PINCTRL_S3C64XX
|
#ifdef CONFIG_PINCTRL_S3C64XX
|
||||||
{ .compatible = "samsung,s3c64xx-pinctrl",
|
{ .compatible = "samsung,s3c64xx-pinctrl",
|
||||||
.data = &s3c64xx_of_data },
|
.data = &s3c64xx_of_data },
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_PINCTRL_S3C24XX
|
|
||||||
{ .compatible = "samsung,s3c2412-pinctrl",
|
|
||||||
.data = &s3c2412_of_data },
|
|
||||||
{ .compatible = "samsung,s3c2416-pinctrl",
|
|
||||||
.data = &s3c2416_of_data },
|
|
||||||
{ .compatible = "samsung,s3c2440-pinctrl",
|
|
||||||
.data = &s3c2440_of_data },
|
|
||||||
{ .compatible = "samsung,s3c2450-pinctrl",
|
|
||||||
.data = &s3c2450_of_data },
|
|
||||||
#endif
|
#endif
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1415,18 +1415,14 @@ config RTC_DRV_OMAP
|
||||||
|
|
||||||
config RTC_DRV_S3C
|
config RTC_DRV_S3C
|
||||||
tristate "Samsung S3C series SoC RTC"
|
tristate "Samsung S3C series SoC RTC"
|
||||||
depends on ARCH_EXYNOS || ARCH_S3C64XX || ARCH_S3C24XX || ARCH_S5PV210 || \
|
depends on ARCH_EXYNOS || ARCH_S3C64XX || ARCH_S5PV210 || \
|
||||||
COMPILE_TEST
|
COMPILE_TEST
|
||||||
help
|
help
|
||||||
RTC (Realtime Clock) driver for the clock inbuilt into the
|
RTC (Realtime Clock) driver for the clock inbuilt into the
|
||||||
Samsung S3C24XX series of SoCs. This can provide periodic
|
Samsung S3C64XX series of SoCs. This can provide periodic
|
||||||
interrupt rates from 1Hz to 64Hz for user programs, and
|
interrupt rates from 1Hz to 64Hz for user programs, and
|
||||||
wakeup from Alarm.
|
wakeup from Alarm.
|
||||||
|
|
||||||
The driver currently supports the common features on all the
|
|
||||||
S3C24XX range, such as the S3C2410, S3C2412, S3C2413, S3C2440
|
|
||||||
and S3C2442.
|
|
||||||
|
|
||||||
This driver can also be build as a module. If so, the module
|
This driver can also be build as a module. If so, the module
|
||||||
will be called rtc-s3c.
|
will be called rtc-s3c.
|
||||||
|
|
||||||
|
|
|
@ -242,23 +242,23 @@ config SERIAL_SAMSUNG
|
||||||
select SERIAL_CORE
|
select SERIAL_CORE
|
||||||
help
|
help
|
||||||
Support for the on-chip UARTs on the Samsung
|
Support for the on-chip UARTs on the Samsung
|
||||||
S3C24xx/S3C64xx/S5Pv210/Exynos and Apple M1 SoCs, providing
|
S3C64xx/S5Pv210/Exynos and Apple M1 SoCs, providing
|
||||||
/dev/ttySAC0, 1 and 2 (note, some machines may not provide all of
|
/dev/ttySAC0, 1 and 2 (note, some machines may not provide all of
|
||||||
these ports, depending on how the serial port pins are configured.
|
these ports, depending on how the serial port pins are configured.
|
||||||
|
|
||||||
Choose Y/M here only if you build for such SoC.
|
Choose Y/M here only if you build for such SoC.
|
||||||
|
|
||||||
config SERIAL_SAMSUNG_UARTS_4
|
config SERIAL_SAMSUNG_UARTS_4
|
||||||
bool
|
bool
|
||||||
depends on SERIAL_SAMSUNG
|
depends on SERIAL_SAMSUNG
|
||||||
default y if !(CPU_S3C2410 || CPU_S3C2412 || CPU_S3C2440 || CPU_S3C2442)
|
default y
|
||||||
help
|
help
|
||||||
Internal node for the common case of 4 Samsung compatible UARTs
|
Internal node for the common case of 4 Samsung compatible UARTs
|
||||||
|
|
||||||
config SERIAL_SAMSUNG_UARTS
|
config SERIAL_SAMSUNG_UARTS
|
||||||
int
|
int
|
||||||
depends on SERIAL_SAMSUNG
|
depends on SERIAL_SAMSUNG
|
||||||
default 4 if SERIAL_SAMSUNG_UARTS_4 || CPU_S3C2416
|
default 4
|
||||||
default 3
|
|
||||||
help
|
help
|
||||||
Select the number of available UART ports for the Samsung S3C
|
Select the number of available UART ports for the Samsung S3C
|
||||||
serial driver
|
serial driver
|
||||||
|
|
|
@ -152,10 +152,6 @@ struct s3c24xx_uart_port {
|
||||||
const struct s3c2410_uartcfg *cfg;
|
const struct s3c2410_uartcfg *cfg;
|
||||||
|
|
||||||
struct s3c24xx_uart_dma *dma;
|
struct s3c24xx_uart_dma *dma;
|
||||||
|
|
||||||
#ifdef CONFIG_ARM_S3C24XX_CPUFREQ
|
|
||||||
struct notifier_block freq_transition;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void s3c24xx_serial_tx_chars(struct s3c24xx_uart_port *ourport);
|
static void s3c24xx_serial_tx_chars(struct s3c24xx_uart_port *ourport);
|
||||||
|
@ -1855,93 +1851,6 @@ static void s3c24xx_serial_resetport(struct uart_port *port,
|
||||||
udelay(1);
|
udelay(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_ARM_S3C24XX_CPUFREQ
|
|
||||||
|
|
||||||
static int s3c24xx_serial_cpufreq_transition(struct notifier_block *nb,
|
|
||||||
unsigned long val, void *data)
|
|
||||||
{
|
|
||||||
struct s3c24xx_uart_port *port;
|
|
||||||
struct uart_port *uport;
|
|
||||||
|
|
||||||
port = container_of(nb, struct s3c24xx_uart_port, freq_transition);
|
|
||||||
uport = &port->port;
|
|
||||||
|
|
||||||
/* check to see if port is enabled */
|
|
||||||
|
|
||||||
if (port->pm_level != 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* try and work out if the baudrate is changing, we can detect
|
|
||||||
* a change in rate, but we do not have support for detecting
|
|
||||||
* a disturbance in the clock-rate over the change.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (IS_ERR(port->baudclk))
|
|
||||||
goto exit;
|
|
||||||
|
|
||||||
if (port->baudclk_rate == clk_get_rate(port->baudclk))
|
|
||||||
goto exit;
|
|
||||||
|
|
||||||
if (val == CPUFREQ_PRECHANGE) {
|
|
||||||
/* we should really shut the port down whilst the
|
|
||||||
* frequency change is in progress.
|
|
||||||
*/
|
|
||||||
|
|
||||||
} else if (val == CPUFREQ_POSTCHANGE) {
|
|
||||||
struct ktermios *termios;
|
|
||||||
struct tty_struct *tty;
|
|
||||||
|
|
||||||
if (uport->state == NULL)
|
|
||||||
goto exit;
|
|
||||||
|
|
||||||
tty = uport->state->port.tty;
|
|
||||||
|
|
||||||
if (tty == NULL)
|
|
||||||
goto exit;
|
|
||||||
|
|
||||||
termios = &tty->termios;
|
|
||||||
|
|
||||||
if (termios == NULL) {
|
|
||||||
dev_warn(uport->dev, "%s: no termios?\n", __func__);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
s3c24xx_serial_set_termios(uport, termios, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
exit:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
s3c24xx_serial_cpufreq_register(struct s3c24xx_uart_port *port)
|
|
||||||
{
|
|
||||||
port->freq_transition.notifier_call = s3c24xx_serial_cpufreq_transition;
|
|
||||||
|
|
||||||
return cpufreq_register_notifier(&port->freq_transition,
|
|
||||||
CPUFREQ_TRANSITION_NOTIFIER);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port)
|
|
||||||
{
|
|
||||||
cpufreq_unregister_notifier(&port->freq_transition,
|
|
||||||
CPUFREQ_TRANSITION_NOTIFIER);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
static inline int
|
|
||||||
s3c24xx_serial_cpufreq_register(struct s3c24xx_uart_port *port)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int s3c24xx_serial_enable_baudclk(struct s3c24xx_uart_port *ourport)
|
static int s3c24xx_serial_enable_baudclk(struct s3c24xx_uart_port *ourport)
|
||||||
{
|
{
|
||||||
struct device *dev = ourport->port.dev;
|
struct device *dev = ourport->port.dev;
|
||||||
|
@ -2233,10 +2142,6 @@ static int s3c24xx_serial_probe(struct platform_device *pdev)
|
||||||
if (!IS_ERR(ourport->baudclk))
|
if (!IS_ERR(ourport->baudclk))
|
||||||
clk_disable_unprepare(ourport->baudclk);
|
clk_disable_unprepare(ourport->baudclk);
|
||||||
|
|
||||||
ret = s3c24xx_serial_cpufreq_register(ourport);
|
|
||||||
if (ret < 0)
|
|
||||||
dev_err(&pdev->dev, "failed to add cpufreq notifier\n");
|
|
||||||
|
|
||||||
probe_index++;
|
probe_index++;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2247,7 +2152,6 @@ static int s3c24xx_serial_remove(struct platform_device *dev)
|
||||||
struct uart_port *port = s3c24xx_dev_to_port(&dev->dev);
|
struct uart_port *port = s3c24xx_dev_to_port(&dev->dev);
|
||||||
|
|
||||||
if (port) {
|
if (port) {
|
||||||
s3c24xx_serial_cpufreq_deregister(to_ourport(port));
|
|
||||||
uart_remove_one_port(&s3c24xx_uart_drv, port);
|
uart_remove_one_port(&s3c24xx_uart_drv, port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2585,94 +2489,6 @@ static struct console s3c24xx_serial_console = {
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_SERIAL_SAMSUNG_CONSOLE */
|
#endif /* CONFIG_SERIAL_SAMSUNG_CONSOLE */
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_S3C2410
|
|
||||||
static const struct s3c24xx_serial_drv_data s3c2410_serial_drv_data = {
|
|
||||||
.info = {
|
|
||||||
.name = "Samsung S3C2410 UART",
|
|
||||||
.type = TYPE_S3C24XX,
|
|
||||||
.port_type = PORT_S3C2410,
|
|
||||||
.fifosize = 16,
|
|
||||||
.rx_fifomask = S3C2410_UFSTAT_RXMASK,
|
|
||||||
.rx_fifoshift = S3C2410_UFSTAT_RXSHIFT,
|
|
||||||
.rx_fifofull = S3C2410_UFSTAT_RXFULL,
|
|
||||||
.tx_fifofull = S3C2410_UFSTAT_TXFULL,
|
|
||||||
.tx_fifomask = S3C2410_UFSTAT_TXMASK,
|
|
||||||
.tx_fifoshift = S3C2410_UFSTAT_TXSHIFT,
|
|
||||||
.def_clk_sel = S3C2410_UCON_CLKSEL0,
|
|
||||||
.num_clks = 2,
|
|
||||||
.clksel_mask = S3C2410_UCON_CLKMASK,
|
|
||||||
.clksel_shift = S3C2410_UCON_CLKSHIFT,
|
|
||||||
},
|
|
||||||
.def_cfg = {
|
|
||||||
.ucon = S3C2410_UCON_DEFAULT,
|
|
||||||
.ufcon = S3C2410_UFCON_DEFAULT,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
#define S3C2410_SERIAL_DRV_DATA (&s3c2410_serial_drv_data)
|
|
||||||
#else
|
|
||||||
#define S3C2410_SERIAL_DRV_DATA NULL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_S3C2412
|
|
||||||
static const struct s3c24xx_serial_drv_data s3c2412_serial_drv_data = {
|
|
||||||
.info = {
|
|
||||||
.name = "Samsung S3C2412 UART",
|
|
||||||
.type = TYPE_S3C24XX,
|
|
||||||
.port_type = PORT_S3C2412,
|
|
||||||
.fifosize = 64,
|
|
||||||
.has_divslot = 1,
|
|
||||||
.rx_fifomask = S3C2440_UFSTAT_RXMASK,
|
|
||||||
.rx_fifoshift = S3C2440_UFSTAT_RXSHIFT,
|
|
||||||
.rx_fifofull = S3C2440_UFSTAT_RXFULL,
|
|
||||||
.tx_fifofull = S3C2440_UFSTAT_TXFULL,
|
|
||||||
.tx_fifomask = S3C2440_UFSTAT_TXMASK,
|
|
||||||
.tx_fifoshift = S3C2440_UFSTAT_TXSHIFT,
|
|
||||||
.def_clk_sel = S3C2410_UCON_CLKSEL2,
|
|
||||||
.num_clks = 4,
|
|
||||||
.clksel_mask = S3C2412_UCON_CLKMASK,
|
|
||||||
.clksel_shift = S3C2412_UCON_CLKSHIFT,
|
|
||||||
},
|
|
||||||
.def_cfg = {
|
|
||||||
.ucon = S3C2410_UCON_DEFAULT,
|
|
||||||
.ufcon = S3C2410_UFCON_DEFAULT,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
#define S3C2412_SERIAL_DRV_DATA (&s3c2412_serial_drv_data)
|
|
||||||
#else
|
|
||||||
#define S3C2412_SERIAL_DRV_DATA NULL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CONFIG_CPU_S3C2440) || defined(CONFIG_CPU_S3C2416) || \
|
|
||||||
defined(CONFIG_CPU_S3C2443) || defined(CONFIG_CPU_S3C2442)
|
|
||||||
static const struct s3c24xx_serial_drv_data s3c2440_serial_drv_data = {
|
|
||||||
.info = {
|
|
||||||
.name = "Samsung S3C2440 UART",
|
|
||||||
.type = TYPE_S3C24XX,
|
|
||||||
.port_type = PORT_S3C2440,
|
|
||||||
.fifosize = 64,
|
|
||||||
.has_divslot = 1,
|
|
||||||
.rx_fifomask = S3C2440_UFSTAT_RXMASK,
|
|
||||||
.rx_fifoshift = S3C2440_UFSTAT_RXSHIFT,
|
|
||||||
.rx_fifofull = S3C2440_UFSTAT_RXFULL,
|
|
||||||
.tx_fifofull = S3C2440_UFSTAT_TXFULL,
|
|
||||||
.tx_fifomask = S3C2440_UFSTAT_TXMASK,
|
|
||||||
.tx_fifoshift = S3C2440_UFSTAT_TXSHIFT,
|
|
||||||
.def_clk_sel = S3C2410_UCON_CLKSEL2,
|
|
||||||
.num_clks = 4,
|
|
||||||
.clksel_mask = S3C2412_UCON_CLKMASK,
|
|
||||||
.clksel_shift = S3C2412_UCON_CLKSHIFT,
|
|
||||||
.ucon_mask = S3C2440_UCON0_DIVMASK,
|
|
||||||
},
|
|
||||||
.def_cfg = {
|
|
||||||
.ucon = S3C2410_UCON_DEFAULT,
|
|
||||||
.ufcon = S3C2410_UFCON_DEFAULT,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
#define S3C2440_SERIAL_DRV_DATA (&s3c2440_serial_drv_data)
|
|
||||||
#else
|
|
||||||
#define S3C2440_SERIAL_DRV_DATA NULL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CONFIG_CPU_S3C6400) || defined(CONFIG_CPU_S3C6410)
|
#if defined(CONFIG_CPU_S3C6400) || defined(CONFIG_CPU_S3C6410)
|
||||||
static const struct s3c24xx_serial_drv_data s3c6400_serial_drv_data = {
|
static const struct s3c24xx_serial_drv_data s3c6400_serial_drv_data = {
|
||||||
.info = {
|
.info = {
|
||||||
|
@ -2841,15 +2657,6 @@ static const struct s3c24xx_serial_drv_data artpec8_serial_drv_data = {
|
||||||
|
|
||||||
static const struct platform_device_id s3c24xx_serial_driver_ids[] = {
|
static const struct platform_device_id s3c24xx_serial_driver_ids[] = {
|
||||||
{
|
{
|
||||||
.name = "s3c2410-uart",
|
|
||||||
.driver_data = (kernel_ulong_t)S3C2410_SERIAL_DRV_DATA,
|
|
||||||
}, {
|
|
||||||
.name = "s3c2412-uart",
|
|
||||||
.driver_data = (kernel_ulong_t)S3C2412_SERIAL_DRV_DATA,
|
|
||||||
}, {
|
|
||||||
.name = "s3c2440-uart",
|
|
||||||
.driver_data = (kernel_ulong_t)S3C2440_SERIAL_DRV_DATA,
|
|
||||||
}, {
|
|
||||||
.name = "s3c6400-uart",
|
.name = "s3c6400-uart",
|
||||||
.driver_data = (kernel_ulong_t)S3C6400_SERIAL_DRV_DATA,
|
.driver_data = (kernel_ulong_t)S3C6400_SERIAL_DRV_DATA,
|
||||||
}, {
|
}, {
|
||||||
|
@ -2877,12 +2684,6 @@ MODULE_DEVICE_TABLE(platform, s3c24xx_serial_driver_ids);
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
static const struct of_device_id s3c24xx_uart_dt_match[] = {
|
static const struct of_device_id s3c24xx_uart_dt_match[] = {
|
||||||
{ .compatible = "samsung,s3c2410-uart",
|
|
||||||
.data = S3C2410_SERIAL_DRV_DATA },
|
|
||||||
{ .compatible = "samsung,s3c2412-uart",
|
|
||||||
.data = S3C2412_SERIAL_DRV_DATA },
|
|
||||||
{ .compatible = "samsung,s3c2440-uart",
|
|
||||||
.data = S3C2440_SERIAL_DRV_DATA },
|
|
||||||
{ .compatible = "samsung,s3c6400-uart",
|
{ .compatible = "samsung,s3c6400-uart",
|
||||||
.data = S3C6400_SERIAL_DRV_DATA },
|
.data = S3C6400_SERIAL_DRV_DATA },
|
||||||
{ .compatible = "samsung,s5pv210-uart",
|
{ .compatible = "samsung,s5pv210-uart",
|
||||||
|
|
|
@ -431,12 +431,12 @@ config USB_OHCI_HCD_STI
|
||||||
STMicroelectronics consumer electronics SoC's.
|
STMicroelectronics consumer electronics SoC's.
|
||||||
|
|
||||||
config USB_OHCI_HCD_S3C2410
|
config USB_OHCI_HCD_S3C2410
|
||||||
tristate "OHCI support for Samsung S3C24xx/S3C64xx SoC series"
|
tristate "OHCI support for Samsung S3C64xx SoC series"
|
||||||
depends on USB_OHCI_HCD && (ARCH_S3C24XX || ARCH_S3C64XX || COMPILE_TEST)
|
depends on USB_OHCI_HCD && (ARCH_S3C64XX || COMPILE_TEST)
|
||||||
default y if (ARCH_S3C24XX || ARCH_S3C64XX)
|
default ARCH_S3C64XX
|
||||||
help
|
help
|
||||||
Enables support for the on-chip OHCI controller on
|
Enables support for the on-chip OHCI controller on
|
||||||
S3C24xx/S3C64xx chips.
|
S3C64xx chips.
|
||||||
|
|
||||||
config USB_OHCI_HCD_LPC32XX
|
config USB_OHCI_HCD_LPC32XX
|
||||||
tristate "Support for LPC on-chip OHCI USB controller"
|
tristate "Support for LPC on-chip OHCI USB controller"
|
||||||
|
|
|
@ -491,14 +491,13 @@ config IXP4XX_WATCHDOG
|
||||||
Say N if you are unsure.
|
Say N if you are unsure.
|
||||||
|
|
||||||
config S3C2410_WATCHDOG
|
config S3C2410_WATCHDOG
|
||||||
tristate "S3C2410 Watchdog"
|
tristate "S3C6410/S5Pv210/Exynos Watchdog"
|
||||||
depends on ARCH_S3C24XX || ARCH_S3C64XX || ARCH_S5PV210 || ARCH_EXYNOS || \
|
depends on ARCH_S3C64XX || ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
|
||||||
COMPILE_TEST
|
|
||||||
select WATCHDOG_CORE
|
select WATCHDOG_CORE
|
||||||
select MFD_SYSCON if ARCH_EXYNOS
|
select MFD_SYSCON if ARCH_EXYNOS
|
||||||
help
|
help
|
||||||
Watchdog timer block in the Samsung S3C24xx, S3C64xx, S5Pv210 and
|
Watchdog timer block in the Samsung S3C64xx, S5Pv210 and Exynos
|
||||||
Exynos SoCs. This will reboot the system when the timer expires with
|
SoCs. This will reboot the system when the timer expires with
|
||||||
the watchdog enabled.
|
the watchdog enabled.
|
||||||
|
|
||||||
The driver is limited by the speed of the system's PCLK
|
The driver is limited by the speed of the system's PCLK
|
||||||
|
|
|
@ -562,73 +562,6 @@ static irqreturn_t s3c2410wdt_irq(int irqno, void *param)
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_ARM_S3C24XX_CPUFREQ
|
|
||||||
|
|
||||||
static int s3c2410wdt_cpufreq_transition(struct notifier_block *nb,
|
|
||||||
unsigned long val, void *data)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
struct s3c2410_wdt *wdt = freq_to_wdt(nb);
|
|
||||||
|
|
||||||
if (!s3c2410wdt_is_running(wdt))
|
|
||||||
goto done;
|
|
||||||
|
|
||||||
if (val == CPUFREQ_PRECHANGE) {
|
|
||||||
/* To ensure that over the change we don't cause the
|
|
||||||
* watchdog to trigger, we perform an keep-alive if
|
|
||||||
* the watchdog is running.
|
|
||||||
*/
|
|
||||||
|
|
||||||
s3c2410wdt_keepalive(&wdt->wdt_device);
|
|
||||||
} else if (val == CPUFREQ_POSTCHANGE) {
|
|
||||||
s3c2410wdt_stop(&wdt->wdt_device);
|
|
||||||
|
|
||||||
ret = s3c2410wdt_set_heartbeat(&wdt->wdt_device,
|
|
||||||
wdt->wdt_device.timeout);
|
|
||||||
|
|
||||||
if (ret >= 0)
|
|
||||||
s3c2410wdt_start(&wdt->wdt_device);
|
|
||||||
else
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
done:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
err:
|
|
||||||
dev_err(wdt->dev, "cannot set new value for timeout %d\n",
|
|
||||||
wdt->wdt_device.timeout);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int s3c2410wdt_cpufreq_register(struct s3c2410_wdt *wdt)
|
|
||||||
{
|
|
||||||
wdt->freq_transition.notifier_call = s3c2410wdt_cpufreq_transition;
|
|
||||||
|
|
||||||
return cpufreq_register_notifier(&wdt->freq_transition,
|
|
||||||
CPUFREQ_TRANSITION_NOTIFIER);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void s3c2410wdt_cpufreq_deregister(struct s3c2410_wdt *wdt)
|
|
||||||
{
|
|
||||||
wdt->freq_transition.notifier_call = s3c2410wdt_cpufreq_transition;
|
|
||||||
|
|
||||||
cpufreq_unregister_notifier(&wdt->freq_transition,
|
|
||||||
CPUFREQ_TRANSITION_NOTIFIER);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
static inline int s3c2410wdt_cpufreq_register(struct s3c2410_wdt *wdt)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void s3c2410wdt_cpufreq_deregister(struct s3c2410_wdt *wdt)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline unsigned int s3c2410wdt_get_bootstatus(struct s3c2410_wdt *wdt)
|
static inline unsigned int s3c2410wdt_get_bootstatus(struct s3c2410_wdt *wdt)
|
||||||
{
|
{
|
||||||
unsigned int rst_stat;
|
unsigned int rst_stat;
|
||||||
|
@ -761,12 +694,6 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
|
||||||
wdt->wdt_device.min_timeout = 1;
|
wdt->wdt_device.min_timeout = 1;
|
||||||
wdt->wdt_device.max_timeout = s3c2410wdt_max_timeout(wdt);
|
wdt->wdt_device.max_timeout = s3c2410wdt_max_timeout(wdt);
|
||||||
|
|
||||||
ret = s3c2410wdt_cpufreq_register(wdt);
|
|
||||||
if (ret < 0) {
|
|
||||||
dev_err(dev, "failed to register cpufreq\n");
|
|
||||||
goto err_src_clk;
|
|
||||||
}
|
|
||||||
|
|
||||||
watchdog_set_drvdata(&wdt->wdt_device, wdt);
|
watchdog_set_drvdata(&wdt->wdt_device, wdt);
|
||||||
|
|
||||||
/* see if we can actually set the requested timer margin, and if
|
/* see if we can actually set the requested timer margin, and if
|
||||||
|
@ -783,7 +710,7 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
|
||||||
S3C2410_WATCHDOG_DEFAULT_TIME);
|
S3C2410_WATCHDOG_DEFAULT_TIME);
|
||||||
} else {
|
} else {
|
||||||
dev_err(dev, "failed to use default timeout\n");
|
dev_err(dev, "failed to use default timeout\n");
|
||||||
goto err_cpufreq;
|
goto err_src_clk;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -791,7 +718,7 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
|
||||||
pdev->name, pdev);
|
pdev->name, pdev);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
dev_err(dev, "failed to install irq (%d)\n", ret);
|
dev_err(dev, "failed to install irq (%d)\n", ret);
|
||||||
goto err_cpufreq;
|
goto err_src_clk;
|
||||||
}
|
}
|
||||||
|
|
||||||
watchdog_set_nowayout(&wdt->wdt_device, nowayout);
|
watchdog_set_nowayout(&wdt->wdt_device, nowayout);
|
||||||
|
@ -817,7 +744,7 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
ret = watchdog_register_device(&wdt->wdt_device);
|
ret = watchdog_register_device(&wdt->wdt_device);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_cpufreq;
|
goto err_src_clk;
|
||||||
|
|
||||||
ret = s3c2410wdt_enable(wdt, true);
|
ret = s3c2410wdt_enable(wdt, true);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -839,9 +766,6 @@ static int s3c2410wdt_probe(struct platform_device *pdev)
|
||||||
err_unregister:
|
err_unregister:
|
||||||
watchdog_unregister_device(&wdt->wdt_device);
|
watchdog_unregister_device(&wdt->wdt_device);
|
||||||
|
|
||||||
err_cpufreq:
|
|
||||||
s3c2410wdt_cpufreq_deregister(wdt);
|
|
||||||
|
|
||||||
err_src_clk:
|
err_src_clk:
|
||||||
clk_disable_unprepare(wdt->src_clk);
|
clk_disable_unprepare(wdt->src_clk);
|
||||||
|
|
||||||
|
@ -862,8 +786,6 @@ static int s3c2410wdt_remove(struct platform_device *dev)
|
||||||
|
|
||||||
watchdog_unregister_device(&wdt->wdt_device);
|
watchdog_unregister_device(&wdt->wdt_device);
|
||||||
|
|
||||||
s3c2410wdt_cpufreq_deregister(wdt);
|
|
||||||
|
|
||||||
clk_disable_unprepare(wdt->src_clk);
|
clk_disable_unprepare(wdt->src_clk);
|
||||||
clk_disable_unprepare(wdt->bus_clk);
|
clk_disable_unprepare(wdt->bus_clk);
|
||||||
|
|
||||||
|
|
|
@ -21,36 +21,4 @@ static inline void s3c64xx_clk_init(struct device_node *np,
|
||||||
bool s3c6400, void __iomem *base) { }
|
bool s3c6400, void __iomem *base) { }
|
||||||
#endif /* CONFIG_S3C64XX_COMMON_CLK */
|
#endif /* CONFIG_S3C64XX_COMMON_CLK */
|
||||||
|
|
||||||
#ifdef CONFIG_S3C2410_COMMON_CLK
|
|
||||||
void s3c2410_common_clk_init(struct device_node *np, unsigned long xti_f,
|
|
||||||
int current_soc,
|
|
||||||
void __iomem *reg_base);
|
|
||||||
#else
|
|
||||||
static inline void s3c2410_common_clk_init(struct device_node *np,
|
|
||||||
unsigned long xti_f,
|
|
||||||
int current_soc,
|
|
||||||
void __iomem *reg_base) { }
|
|
||||||
#endif /* CONFIG_S3C2410_COMMON_CLK */
|
|
||||||
|
|
||||||
#ifdef CONFIG_S3C2412_COMMON_CLK
|
|
||||||
void s3c2412_common_clk_init(struct device_node *np, unsigned long xti_f,
|
|
||||||
unsigned long ext_f, void __iomem *reg_base);
|
|
||||||
#else
|
|
||||||
static inline void s3c2412_common_clk_init(struct device_node *np,
|
|
||||||
unsigned long xti_f,
|
|
||||||
unsigned long ext_f,
|
|
||||||
void __iomem *reg_base) { }
|
|
||||||
#endif /* CONFIG_S3C2412_COMMON_CLK */
|
|
||||||
|
|
||||||
#ifdef CONFIG_S3C2443_COMMON_CLK
|
|
||||||
void s3c2443_common_clk_init(struct device_node *np, unsigned long xti_f,
|
|
||||||
int current_soc,
|
|
||||||
void __iomem *reg_base);
|
|
||||||
#else
|
|
||||||
static inline void s3c2443_common_clk_init(struct device_node *np,
|
|
||||||
unsigned long xti_f,
|
|
||||||
int current_soc,
|
|
||||||
void __iomem *reg_base) { }
|
|
||||||
#endif /* CONFIG_S3C2443_COMMON_CLK */
|
|
||||||
|
|
||||||
#endif /* __LINUX_CLK_SAMSUNG_H_ */
|
#endif /* __LINUX_CLK_SAMSUNG_H_ */
|
||||||
|
|
|
@ -14,58 +14,10 @@
|
||||||
|
|
||||||
/* PM debug functions */
|
/* PM debug functions */
|
||||||
|
|
||||||
/**
|
|
||||||
* struct pm_uart_save - save block for core UART
|
|
||||||
* @ulcon: Save value for S3C2410_ULCON
|
|
||||||
* @ucon: Save value for S3C2410_UCON
|
|
||||||
* @ufcon: Save value for S3C2410_UFCON
|
|
||||||
* @umcon: Save value for S3C2410_UMCON
|
|
||||||
* @ubrdiv: Save value for S3C2410_UBRDIV
|
|
||||||
*
|
|
||||||
* Save block for UART registers to be held over sleep and restored if they
|
|
||||||
* are needed (say by debug).
|
|
||||||
*/
|
|
||||||
struct pm_uart_save {
|
|
||||||
u32 ulcon;
|
|
||||||
u32 ucon;
|
|
||||||
u32 ufcon;
|
|
||||||
u32 umcon;
|
|
||||||
u32 ubrdiv;
|
|
||||||
u32 udivslot;
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef CONFIG_SAMSUNG_PM_DEBUG
|
|
||||||
/**
|
|
||||||
* s3c_pm_dbg() - low level debug function for use in suspend/resume.
|
|
||||||
* @msg: The message to print.
|
|
||||||
*
|
|
||||||
* This function is used mainly to debug the resume process before the system
|
|
||||||
* can rely on printk/console output. It uses the low-level debugging output
|
|
||||||
* routine printascii() to do its work.
|
|
||||||
*/
|
|
||||||
extern void s3c_pm_dbg(const char *msg, ...);
|
|
||||||
|
|
||||||
#define S3C_PMDBG(fmt...) s3c_pm_dbg(fmt)
|
|
||||||
|
|
||||||
extern void s3c_pm_save_uarts(bool is_s3c24xx);
|
|
||||||
extern void s3c_pm_restore_uarts(bool is_s3c24xx);
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_S3C64XX
|
|
||||||
extern void s3c_pm_arch_update_uart(void __iomem *regs,
|
|
||||||
struct pm_uart_save *save);
|
|
||||||
#else
|
|
||||||
static inline void
|
|
||||||
s3c_pm_arch_update_uart(void __iomem *regs, struct pm_uart_save *save)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else
|
|
||||||
#define S3C_PMDBG(fmt...) pr_debug(fmt)
|
#define S3C_PMDBG(fmt...) pr_debug(fmt)
|
||||||
|
|
||||||
static inline void s3c_pm_save_uarts(bool is_s3c24xx) { }
|
static inline void s3c_pm_save_uarts(bool is_s3c24xx) { }
|
||||||
static inline void s3c_pm_restore_uarts(bool is_s3c24xx) { }
|
static inline void s3c_pm_restore_uarts(bool is_s3c24xx) { }
|
||||||
#endif
|
|
||||||
|
|
||||||
/* suspend memory checking */
|
/* suspend memory checking */
|
||||||
|
|
||||||
|
@ -81,14 +33,4 @@ extern void s3c_pm_check_store(void);
|
||||||
#define s3c_pm_check_store() do { } while (0)
|
#define s3c_pm_check_store() do { } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* system device subsystems */
|
|
||||||
|
|
||||||
extern struct bus_type s3c2410_subsys;
|
|
||||||
extern struct bus_type s3c2410a_subsys;
|
|
||||||
extern struct bus_type s3c2412_subsys;
|
|
||||||
extern struct bus_type s3c2416_subsys;
|
|
||||||
extern struct bus_type s3c2440_subsys;
|
|
||||||
extern struct bus_type s3c2442_subsys;
|
|
||||||
extern struct bus_type s3c2443_subsys;
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue