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

Commit 446e326c authored by Paul Mundt's avatar Paul Mundt
Browse files

Merge branch 'rmobile/mackerel' into rmobile-fixes-for-linus

parents d5bb386d 6d9b7dd0
Loading
Loading
Loading
Loading
+19 −64
Original line number Original line Diff line number Diff line
@@ -43,7 +43,6 @@
#include <linux/smsc911x.h>
#include <linux/smsc911x.h>
#include <linux/sh_intc.h>
#include <linux/sh_intc.h>
#include <linux/tca6416_keypad.h>
#include <linux/tca6416_keypad.h>
#include <linux/usb/r8a66597.h>
#include <linux/usb/renesas_usbhs.h>
#include <linux/usb/renesas_usbhs.h>
#include <linux/dma-mapping.h>
#include <linux/dma-mapping.h>


@@ -145,11 +144,6 @@
 * 1-2 short | VBUS 5V       | Host
 * 1-2 short | VBUS 5V       | Host
 * open      | external VBUS | Function
 * open      | external VBUS | Function
 *
 *
 * *1
 * CN31 is used as
 * CONFIG_USB_R8A66597_HCD	Host
 * CONFIG_USB_RENESAS_USBHS	Function
 *
 * CAUTION
 * CAUTION
 *
 *
 * renesas_usbhs driver can use external interrupt mode
 * renesas_usbhs driver can use external interrupt mode
@@ -161,15 +155,6 @@
 * mackerel can not use external interrupt (IRQ7-PORT167) mode on "USB0",
 * mackerel can not use external interrupt (IRQ7-PORT167) mode on "USB0",
 * because Touchscreen is using IRQ7-PORT40.
 * because Touchscreen is using IRQ7-PORT40.
 * It is impossible to use IRQ7 demux on this board.
 * It is impossible to use IRQ7 demux on this board.
 *
 * We can use external interrupt mode USB-Function on "USB1".
 * USB1 can become Host by r8a66597, and become Function by renesas_usbhs.
 * But don't select both drivers in same time.
 * These uses same IRQ number for request_irq(), and aren't supporting
 * IRQF_SHARED / IORESOURCE_IRQ_SHAREABLE.
 *
 * Actually these are old/new version of USB driver.
 * This mean its register will be broken if it supports shared IRQ,
 */
 */


/*
/*
@@ -207,6 +192,16 @@
 *
 *
 */
 */


/*
 * FSI - AK4642
 *
 * it needs amixer settings for playing
 *
 * amixer set "Headphone" on
 * amixer set "HPOUTL Mixer DACH" on
 * amixer set "HPOUTR Mixer DACH" on
 */

/*
/*
 * FIXME !!
 * FIXME !!
 *
 *
@@ -676,51 +671,16 @@ static struct platform_device usbhs0_device = {
 * Use J30 to select between Host and Function. This setting
 * Use J30 to select between Host and Function. This setting
 * can however not be detected by software. Hotplug of USBHS1
 * can however not be detected by software. Hotplug of USBHS1
 * is provided via IRQ8.
 * is provided via IRQ8.
 *
 * Current USB1 works as "USB Host".
 *  - set J30 "short"
 *
 * If you want to use it as "USB gadget",
 *  - J30 "open"
 *  - modify usbhs1_get_id() USBHS_HOST -> USBHS_GADGET
 *  - add .get_vbus = usbhs_get_vbus in usbhs1_private
 */
 */
#define IRQ8 evt2irq(0x0300)
#define IRQ8 evt2irq(0x0300)

/* USBHS1 USB Host support via r8a66597_hcd */
static void usb1_host_port_power(int port, int power)
{
	if (!power) /* only power-on is supported for now */
		return;

	/* set VBOUT/PWEN and EXTLP1 in DVSTCTR */
	__raw_writew(__raw_readw(0xE68B0008) | 0x600, 0xE68B0008);
}

static struct r8a66597_platdata usb1_host_data = {
	.on_chip	= 1,
	.port_power	= usb1_host_port_power,
};

static struct resource usb1_host_resources[] = {
	[0] = {
		.name	= "USBHS1",
		.start	= 0xe68b0000,
		.end	= 0xe68b00e6 - 1,
		.flags	= IORESOURCE_MEM,
	},
	[1] = {
		.start	= evt2irq(0x1ce0) /* USB1_USB1I0 */,
		.flags	= IORESOURCE_IRQ,
	},
};

static struct platform_device usb1_host_device = {
	.name	= "r8a66597_hcd",
	.id	= 1,
	.dev = {
		.dma_mask		= NULL,         /*  not use dma */
		.coherent_dma_mask	= 0xffffffff,
		.platform_data		= &usb1_host_data,
	},
	.num_resources	= ARRAY_SIZE(usb1_host_resources),
	.resource	= usb1_host_resources,
};

/* USBHS1 USB Function support via renesas_usbhs */

#define USB_PHY_MODE		(1 << 4)
#define USB_PHY_MODE		(1 << 4)
#define USB_PHY_INT_EN		((1 << 3) | (1 << 2))
#define USB_PHY_INT_EN		((1 << 3) | (1 << 2))
#define USB_PHY_ON		(1 << 1)
#define USB_PHY_ON		(1 << 1)
@@ -776,7 +736,7 @@ static void usbhs1_hardware_exit(struct platform_device *pdev)


static int usbhs1_get_id(struct platform_device *pdev)
static int usbhs1_get_id(struct platform_device *pdev)
{
{
	return USBHS_GADGET;
	return USBHS_HOST;
}
}


static u32 usbhs1_pipe_cfg[] = {
static u32 usbhs1_pipe_cfg[] = {
@@ -807,7 +767,6 @@ static struct usbhs_private usbhs1_private = {
			.hardware_exit	= usbhs1_hardware_exit,
			.hardware_exit	= usbhs1_hardware_exit,
			.get_id		= usbhs1_get_id,
			.get_id		= usbhs1_get_id,
			.phy_reset	= usbhs_phy_reset,
			.phy_reset	= usbhs_phy_reset,
			.get_vbus	= usbhs_get_vbus,
		},
		},
		.driver_param = {
		.driver_param = {
			.buswait_bwait	= 4,
			.buswait_bwait	= 4,
@@ -1303,7 +1262,6 @@ static struct platform_device *mackerel_devices[] __initdata = {
	&nor_flash_device,
	&nor_flash_device,
	&smc911x_device,
	&smc911x_device,
	&lcdc_device,
	&lcdc_device,
	&usb1_host_device,
	&usbhs1_device,
	&usbhs1_device,
	&usbhs0_device,
	&usbhs0_device,
	&leds_device,
	&leds_device,
@@ -1465,9 +1423,6 @@ static void __init mackerel_init(void)
	gpio_pull_down(GPIO_PORT167CR); /* VBUS0_1 pull down */
	gpio_pull_down(GPIO_PORT167CR); /* VBUS0_1 pull down */
	gpio_request(GPIO_FN_IDIN_1_113, NULL);
	gpio_request(GPIO_FN_IDIN_1_113, NULL);


	/* USB phy tweak to make the r8a66597_hcd host driver work */
	__raw_writew(0x8a0a, 0xe6058130);       /* USBCR4 */

	/* enable FSI2 port A (ak4643) */
	/* enable FSI2 port A (ak4643) */
	gpio_request(GPIO_FN_FSIAIBT,	NULL);
	gpio_request(GPIO_FN_FSIAIBT,	NULL);
	gpio_request(GPIO_FN_FSIAILR,	NULL);
	gpio_request(GPIO_FN_FSIAILR,	NULL);