Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a5da0e4 authored by Laurent Pinchart's avatar Laurent Pinchart
Browse files

clocksource: sh_mtu2: Drop support for legacy platform data



Now that all platforms have switched to the new-style platform data,
drop support for the legacy version.

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tested-by: default avatarWolfram Sang <wsa@sang-engineering.com>
parent 2b027f1f
Loading
Loading
Loading
Loading
+31 −99
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ struct sh_mtu2_channel {
	unsigned int index;

	void __iomem *base;
	int irq;

	struct clock_event_device ced;
};
@@ -51,7 +50,6 @@ struct sh_mtu2_device {
	struct sh_mtu2_channel *channels;
	unsigned int num_channels;

	bool legacy;
	bool has_clockevent;
};

@@ -162,12 +160,8 @@ static inline unsigned long sh_mtu2_read(struct sh_mtu2_channel *ch, int reg_nr)
{
	unsigned long offs;

	if (reg_nr == TSTR) {
		if (ch->mtu->legacy)
			return ioread8(ch->mtu->mapbase);
		else
	if (reg_nr == TSTR)
		return ioread8(ch->mtu->mapbase + 0x280);
	}

	offs = mtu2_reg_offs[reg_nr];

@@ -182,12 +176,8 @@ static inline void sh_mtu2_write(struct sh_mtu2_channel *ch, int reg_nr,
{
	unsigned long offs;

	if (reg_nr == TSTR) {
		if (ch->mtu->legacy)
			return iowrite8(value, ch->mtu->mapbase);
		else
	if (reg_nr == TSTR)
		return iowrite8(value, ch->mtu->mapbase + 0x280);
	}

	offs = mtu2_reg_offs[reg_nr];

@@ -331,7 +321,6 @@ static void sh_mtu2_register_clockevent(struct sh_mtu2_channel *ch,
					const char *name)
{
	struct clock_event_device *ced = &ch->ced;
	int ret;

	ced->name = name;
	ced->features = CLOCK_EVT_FEAT_PERIODIC;
@@ -344,24 +333,12 @@ static void sh_mtu2_register_clockevent(struct sh_mtu2_channel *ch,
	dev_info(&ch->mtu->pdev->dev, "ch%u: used for clock events\n",
		 ch->index);
	clockevents_register_device(ced);

	ret = request_irq(ch->irq, sh_mtu2_interrupt,
			  IRQF_TIMER | IRQF_IRQPOLL | IRQF_NOBALANCING,
			  dev_name(&ch->mtu->pdev->dev), ch);
	if (ret) {
		dev_err(&ch->mtu->pdev->dev, "ch%u: failed to request irq %d\n",
			ch->index, ch->irq);
		return;
	}
}

static int sh_mtu2_register(struct sh_mtu2_channel *ch, const char *name,
			    bool clockevent)
static int sh_mtu2_register(struct sh_mtu2_channel *ch, const char *name)
{
	if (clockevent) {
	ch->mtu->has_clockevent = true;
	sh_mtu2_register_clockevent(ch, name);
	}

	return 0;
}
@@ -372,40 +349,32 @@ static int sh_mtu2_setup_channel(struct sh_mtu2_channel *ch, unsigned int index,
	static const unsigned int channel_offsets[] = {
		0x300, 0x380, 0x000,
	};
	bool clockevent;

	ch->mtu = mtu;

	if (mtu->legacy) {
		struct sh_timer_config *cfg = mtu->pdev->dev.platform_data;

		clockevent = cfg->clockevent_rating != 0;

		ch->irq = platform_get_irq(mtu->pdev, 0);
		ch->base = mtu->mapbase - cfg->channel_offset;
		ch->index = cfg->timer_bit;
	} else {
	char name[6];
	int irq;
	int ret;

		clockevent = true;
	ch->mtu = mtu;

	sprintf(name, "tgi%ua", index);
		ch->irq = platform_get_irq_byname(mtu->pdev, name);
		ch->base = mtu->mapbase + channel_offsets[index];
		ch->index = index;
	}

	if (ch->irq < 0) {
	irq = platform_get_irq_byname(mtu->pdev, name);
	if (irq < 0) {
		/* Skip channels with no declared interrupt. */
		if (!mtu->legacy)
		return 0;
	}

		dev_err(&mtu->pdev->dev, "ch%u: failed to get irq\n",
			ch->index);
		return ch->irq;
	ret = request_irq(irq, sh_mtu2_interrupt,
			  IRQF_TIMER | IRQF_IRQPOLL | IRQF_NOBALANCING,
			  dev_name(&ch->mtu->pdev->dev), ch);
	if (ret) {
		dev_err(&ch->mtu->pdev->dev, "ch%u: failed to request irq %d\n",
			index, irq);
		return ret;
	}

	return sh_mtu2_register(ch, dev_name(&mtu->pdev->dev), clockevent);
	ch->base = mtu->mapbase + channel_offsets[index];
	ch->index = index;

	return sh_mtu2_register(ch, dev_name(&mtu->pdev->dev));
}

static int sh_mtu2_map_memory(struct sh_mtu2_device *mtu)
@@ -422,46 +391,19 @@ static int sh_mtu2_map_memory(struct sh_mtu2_device *mtu)
	if (mtu->mapbase == NULL)
		return -ENXIO;

	/*
	 * In legacy platform device configuration (with one device per channel)
	 * the resource points to the channel base address.
	 */
	if (mtu->legacy) {
		struct sh_timer_config *cfg = mtu->pdev->dev.platform_data;
		mtu->mapbase += cfg->channel_offset;
	}

	return 0;
}

static void sh_mtu2_unmap_memory(struct sh_mtu2_device *mtu)
{
	if (mtu->legacy) {
		struct sh_timer_config *cfg = mtu->pdev->dev.platform_data;
		mtu->mapbase -= cfg->channel_offset;
	}

	iounmap(mtu->mapbase);
}

static int sh_mtu2_setup(struct sh_mtu2_device *mtu,
			 struct platform_device *pdev)
{
	struct sh_timer_config *cfg = pdev->dev.platform_data;
	const struct platform_device_id *id = pdev->id_entry;
	unsigned int i;
	int ret;

	mtu->pdev = pdev;
	mtu->legacy = id->driver_data;

	if (mtu->legacy && !cfg) {
		dev_err(&mtu->pdev->dev, "missing platform data\n");
		return -ENXIO;
	}

	/* Get hold of clock. */
	mtu->clk = clk_get(&mtu->pdev->dev, mtu->legacy ? "mtu2_fck" : "fck");
	mtu->clk = clk_get(&mtu->pdev->dev, "fck");
	if (IS_ERR(mtu->clk)) {
		dev_err(&mtu->pdev->dev, "cannot get clock\n");
		return PTR_ERR(mtu->clk);
@@ -479,9 +421,6 @@ static int sh_mtu2_setup(struct sh_mtu2_device *mtu,
	}

	/* Allocate and setup the channels. */
	if (mtu->legacy)
		mtu->num_channels = 1;
	else
	mtu->num_channels = 3;

	mtu->channels = kzalloc(sizeof(*mtu->channels) * mtu->num_channels,
@@ -491,17 +430,11 @@ static int sh_mtu2_setup(struct sh_mtu2_device *mtu,
		goto err_unmap;
	}

	if (mtu->legacy) {
		ret = sh_mtu2_setup_channel(&mtu->channels[0], 0, mtu);
		if (ret < 0)
			goto err_unmap;
	} else {
	for (i = 0; i < mtu->num_channels; ++i) {
		ret = sh_mtu2_setup_channel(&mtu->channels[i], i, mtu);
		if (ret < 0)
			goto err_unmap;
	}
	}

	platform_set_drvdata(pdev, mtu);

@@ -509,7 +442,7 @@ static int sh_mtu2_setup(struct sh_mtu2_device *mtu,

err_unmap:
	kfree(mtu->channels);
	sh_mtu2_unmap_memory(mtu);
	iounmap(mtu->mapbase);
err_clk_unprepare:
	clk_unprepare(mtu->clk);
err_clk_put:
@@ -560,7 +493,6 @@ static int sh_mtu2_remove(struct platform_device *pdev)
}

static const struct platform_device_id sh_mtu2_id_table[] = {
	{ "sh_mtu2", 1 },
	{ "sh-mtu2", 0 },
	{ },
};