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

Commit 6ad1b614 authored by Russell King's avatar Russell King
Browse files

ARM: sa11x0: neponset: provide function to manipulate NCR_0



Rather than having direct register accesses to NCR_0 scattered amongst
the code, provide a function instead.  This contains the necessary
race protection for this platform, ensuring that updates to this
register are safe.

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 71045520
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -71,4 +71,8 @@
#define NCR_A0VPP		(1<<5)
#define NCR_A1VPP		(1<<6)

void neponset_ncr_frob(unsigned int, unsigned int);
#define neponset_ncr_set(v)	neponset_ncr_frob(0, v)
#define neponset_ncr_clear(v)	neponset_ncr_frob(v, 0)

#endif
+9 −0
Original line number Diff line number Diff line
@@ -20,6 +20,15 @@
#include <asm/hardware/sa1111.h>
#include <asm/sizes.h>

void neponset_ncr_frob(unsigned int mask, unsigned int val)
{
	unsigned long flags;

	local_irq_save(flags);
	NCR_0 = (NCR_0 & ~mask) | val;
	local_irq_restore(flags);
}

/*
 * Install handler for Neponset IRQ.  Note that we have to loop here
 * since the ETHERNET and USAR IRQs are level based, and we need to
+1 −1
Original line number Diff line number Diff line
@@ -2281,7 +2281,7 @@ static int __devinit smc_drv_probe(struct platform_device *pdev)
	if (ret)
		goto out_release_io;
#if defined(CONFIG_SA1100_ASSABET)
	NCR_0 |= NCR_ENET_OSC_EN;
	neponset_ncr_set(NCR_ENET_OSC_EN);
#endif
	platform_set_drvdata(pdev, ndev);
	ret = smc_enable_device(pdev);
+1 −6
Original line number Diff line number Diff line
@@ -94,12 +94,7 @@ neponset_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_sta

	ret = sa1111_pcmcia_configure_socket(skt, state);
	if (ret == 0) {
		unsigned long flags;

		local_irq_save(flags);
		NCR_0 = (NCR_0 & ~ncr_mask) | ncr_set;

		local_irq_restore(flags);
		neponset_ncr_frob(ncr_mask, ncr_set);
		sa1111_set_io(s->dev, pa_dwr_mask, pa_dwr_set);
	}