Skip to content

Commit

Permalink
rtc-m48t59: allow externally mapped ioaddr
Browse files Browse the repository at this point in the history
Add support for externally mapped ioaddr.  This is required on sparc32
as the ioaddr must be mapped with of_ioremap().

Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Krzysztof Helt authored and David S. Miller committed Sep 3, 2008
1 parent 94fe742 commit 64151ad
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
14 changes: 10 additions & 4 deletions drivers/rtc/rtc-m48t59.c
Original file line number Diff line number Diff line change
Expand Up @@ -411,9 +411,14 @@ static int __devinit m48t59_rtc_probe(struct platform_device *pdev)
if (!m48t59)
return -ENOMEM;

m48t59->ioaddr = ioremap(res->start, res->end - res->start + 1);
if (!m48t59->ioaddr)
goto out;
m48t59->ioaddr = pdata->ioaddr;

if (!m48t59->ioaddr) {
/* ioaddr not mapped externally */
m48t59->ioaddr = ioremap(res->start, res->end - res->start + 1);
if (!m48t59->ioaddr)
goto out;
}

/* Try to get irq number. We also can work in
* the mode without IRQ.
Expand Down Expand Up @@ -481,11 +486,12 @@ static int __devinit m48t59_rtc_probe(struct platform_device *pdev)
static int __devexit m48t59_rtc_remove(struct platform_device *pdev)
{
struct m48t59_private *m48t59 = platform_get_drvdata(pdev);
struct m48t59_plat_data *pdata = pdev->dev.platform_data;

sysfs_remove_bin_file(&pdev->dev.kobj, &m48t59_nvram_attr);
if (!IS_ERR(m48t59->rtc))
rtc_device_unregister(m48t59->rtc);
if (m48t59->ioaddr)
if (m48t59->ioaddr && !pdata->ioaddr)
iounmap(m48t59->ioaddr);
if (m48t59->irq != NO_IRQ)
free_irq(m48t59->irq, &pdev->dev);
Expand Down
2 changes: 2 additions & 0 deletions include/linux/rtc/m48t59.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ struct m48t59_plat_data {

int type; /* RTC model */

/* ioaddr mapped externally */
void __iomem *ioaddr;
/* offset to RTC registers, automatically set according to the type */
unsigned int offset;
};
Expand Down

0 comments on commit 64151ad

Please sign in to comment.