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: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tested-by: Wolfram Sang <wsa@sang-engineering.com>
This commit is contained in:
Laurent Pinchart 2014-03-04 18:13:57 +01:00
parent 2b027f1f0f
commit 1a5da0e43b

View file

@ -37,7 +37,6 @@ struct sh_mtu2_channel {
unsigned int index; unsigned int index;
void __iomem *base; void __iomem *base;
int irq;
struct clock_event_device ced; struct clock_event_device ced;
}; };
@ -51,7 +50,6 @@ struct sh_mtu2_device {
struct sh_mtu2_channel *channels; struct sh_mtu2_channel *channels;
unsigned int num_channels; unsigned int num_channels;
bool legacy;
bool has_clockevent; 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; unsigned long offs;
if (reg_nr == TSTR) { if (reg_nr == TSTR)
if (ch->mtu->legacy) return ioread8(ch->mtu->mapbase + 0x280);
return ioread8(ch->mtu->mapbase);
else
return ioread8(ch->mtu->mapbase + 0x280);
}
offs = mtu2_reg_offs[reg_nr]; 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; unsigned long offs;
if (reg_nr == TSTR) { if (reg_nr == TSTR)
if (ch->mtu->legacy) return iowrite8(value, ch->mtu->mapbase + 0x280);
return iowrite8(value, ch->mtu->mapbase);
else
return iowrite8(value, ch->mtu->mapbase + 0x280);
}
offs = mtu2_reg_offs[reg_nr]; offs = mtu2_reg_offs[reg_nr];
@ -331,7 +321,6 @@ static void sh_mtu2_register_clockevent(struct sh_mtu2_channel *ch,
const char *name) const char *name)
{ {
struct clock_event_device *ced = &ch->ced; struct clock_event_device *ced = &ch->ced;
int ret;
ced->name = name; ced->name = name;
ced->features = CLOCK_EVT_FEAT_PERIODIC; 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", dev_info(&ch->mtu->pdev->dev, "ch%u: used for clock events\n",
ch->index); ch->index);
clockevents_register_device(ced); 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, static int sh_mtu2_register(struct sh_mtu2_channel *ch, const char *name)
bool clockevent)
{ {
if (clockevent) { ch->mtu->has_clockevent = true;
ch->mtu->has_clockevent = true; sh_mtu2_register_clockevent(ch, name);
sh_mtu2_register_clockevent(ch, name);
}
return 0; 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[] = { static const unsigned int channel_offsets[] = {
0x300, 0x380, 0x000, 0x300, 0x380, 0x000,
}; };
bool clockevent; char name[6];
int irq;
int ret;
ch->mtu = mtu; ch->mtu = mtu;
if (mtu->legacy) { sprintf(name, "tgi%ua", index);
struct sh_timer_config *cfg = mtu->pdev->dev.platform_data; irq = platform_get_irq_byname(mtu->pdev, name);
if (irq < 0) {
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];
clockevent = true;
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) {
/* Skip channels with no declared interrupt. */ /* Skip channels with no declared interrupt. */
if (!mtu->legacy) return 0;
return 0;
dev_err(&mtu->pdev->dev, "ch%u: failed to get irq\n",
ch->index);
return ch->irq;
} }
return sh_mtu2_register(ch, dev_name(&mtu->pdev->dev), clockevent); 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;
}
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) 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) if (mtu->mapbase == NULL)
return -ENXIO; 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; 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, static int sh_mtu2_setup(struct sh_mtu2_device *mtu,
struct platform_device *pdev) 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; unsigned int i;
int ret; int ret;
mtu->pdev = pdev; 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. */ /* 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)) { if (IS_ERR(mtu->clk)) {
dev_err(&mtu->pdev->dev, "cannot get clock\n"); dev_err(&mtu->pdev->dev, "cannot get clock\n");
return PTR_ERR(mtu->clk); return PTR_ERR(mtu->clk);
@ -479,10 +421,7 @@ static int sh_mtu2_setup(struct sh_mtu2_device *mtu,
} }
/* Allocate and setup the channels. */ /* Allocate and setup the channels. */
if (mtu->legacy) mtu->num_channels = 3;
mtu->num_channels = 1;
else
mtu->num_channels = 3;
mtu->channels = kzalloc(sizeof(*mtu->channels) * mtu->num_channels, mtu->channels = kzalloc(sizeof(*mtu->channels) * mtu->num_channels,
GFP_KERNEL); GFP_KERNEL);
@ -491,16 +430,10 @@ static int sh_mtu2_setup(struct sh_mtu2_device *mtu,
goto err_unmap; goto err_unmap;
} }
if (mtu->legacy) { for (i = 0; i < mtu->num_channels; ++i) {
ret = sh_mtu2_setup_channel(&mtu->channels[0], 0, mtu); ret = sh_mtu2_setup_channel(&mtu->channels[i], i, mtu);
if (ret < 0) if (ret < 0)
goto err_unmap; 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); platform_set_drvdata(pdev, mtu);
@ -509,7 +442,7 @@ static int sh_mtu2_setup(struct sh_mtu2_device *mtu,
err_unmap: err_unmap:
kfree(mtu->channels); kfree(mtu->channels);
sh_mtu2_unmap_memory(mtu); iounmap(mtu->mapbase);
err_clk_unprepare: err_clk_unprepare:
clk_unprepare(mtu->clk); clk_unprepare(mtu->clk);
err_clk_put: 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[] = { static const struct platform_device_id sh_mtu2_id_table[] = {
{ "sh_mtu2", 1 },
{ "sh-mtu2", 0 }, { "sh-mtu2", 0 },
{ }, { },
}; };