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

Commit 82c5cde1 authored by Tony Lindgren's avatar Tony Lindgren
Browse files

ARM: OMAP2+: Remove omap4 ocp2scp pdata



This is omap4+ only and no longer needed as omap4+ can be booted
using device tree.

Also remove the related pdata handling from the driver and the
now unneeded platform_data/omap_ocp2scp.h.

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Olof Johansson <olof@lixom.net>
Reviewed-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
Acked-by: default avatarFelipe Balbi <balbi@ti.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 608d1938
Loading
Loading
Loading
Loading
+0 −78
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@
#include <linux/of.h>
#include <linux/pinctrl/machine.h>
#include <linux/platform_data/omap4-keypad.h>
#include <linux/platform_data/omap_ocp2scp.h>
#include <linux/wl12xx.h>

#include <asm/mach-types.h>
@@ -515,82 +514,6 @@ static void omap_init_vout(void)
static inline void omap_init_vout(void) {}
#endif

#if defined(CONFIG_OMAP_OCP2SCP) || defined(CONFIG_OMAP_OCP2SCP_MODULE)
static int count_ocp2scp_devices(struct omap_ocp2scp_dev *ocp2scp_dev)
{
	int cnt	= 0;

	while (ocp2scp_dev->drv_name != NULL) {
		cnt++;
		ocp2scp_dev++;
	}

	return cnt;
}

static void __init omap_init_ocp2scp(void)
{
	struct omap_hwmod	*oh;
	struct platform_device	*pdev;
	int			bus_id = -1, dev_cnt = 0, i;
	struct omap_ocp2scp_dev	*ocp2scp_dev;
	const char		*oh_name, *name;
	struct omap_ocp2scp_platform_data *pdata;

	if (!cpu_is_omap44xx())
		return;

	oh_name = "ocp2scp_usb_phy";
	name	= "omap-ocp2scp";

	oh = omap_hwmod_lookup(oh_name);
	if (!oh) {
		pr_err("%s: could not find omap_hwmod for %s\n", __func__,
								oh_name);
		return;
	}

	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
	if (!pdata) {
		pr_err("%s: No memory for ocp2scp pdata\n", __func__);
		return;
	}

	ocp2scp_dev = oh->dev_attr;
	dev_cnt = count_ocp2scp_devices(ocp2scp_dev);

	if (!dev_cnt) {
		pr_err("%s: No devices connected to ocp2scp\n", __func__);
		kfree(pdata);
		return;
	}

	pdata->devices = kzalloc(sizeof(struct omap_ocp2scp_dev *)
					* dev_cnt, GFP_KERNEL);
	if (!pdata->devices) {
		pr_err("%s: No memory for ocp2scp pdata devices\n", __func__);
		kfree(pdata);
		return;
	}

	for (i = 0; i < dev_cnt; i++, ocp2scp_dev++)
		pdata->devices[i] = ocp2scp_dev;

	pdata->dev_cnt	= dev_cnt;

	pdev = omap_device_build(name, bus_id, oh, pdata, sizeof(*pdata));
	if (IS_ERR(pdev)) {
		pr_err("Could not build omap_device for %s %s\n",
						name, oh_name);
		kfree(pdata->devices);
		kfree(pdata);
		return;
	}
}
#else
static inline void omap_init_ocp2scp(void) { }
#endif

#if IS_ENABLED(CONFIG_WL12XX)

static struct wl12xx_platform_data wl12xx __initdata;
@@ -655,7 +578,6 @@ static int __init omap2_init_devices(void)
	omap_init_sti();
	omap_init_rng();
	omap_init_vout();
	omap_init_ocp2scp();

	return 0;
}
+0 −21
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@
#include <linux/io.h>
#include <linux/platform_data/gpio-omap.h>
#include <linux/power/smartreflex.h>
#include <linux/platform_data/omap_ocp2scp.h>
#include <linux/i2c-omap.h>

#include <linux/omap-dma.h>
@@ -2695,25 +2694,6 @@ static struct omap_hwmod_class omap44xx_ocp2scp_hwmod_class = {
	.sysc	= &omap44xx_ocp2scp_sysc,
};

/* ocp2scp dev_attr */
static struct resource omap44xx_usb_phy_and_pll_addrs[] = {
	{
		.name		= "usb_phy",
		.start		= 0x4a0ad080,
		.end		= 0x4a0ae000,
		.flags		= IORESOURCE_MEM,
	},
	{ }
};

static struct omap_ocp2scp_dev ocp2scp_dev_attr[] = {
	{
		.drv_name       = "omap-usb2",
		.res		= omap44xx_usb_phy_and_pll_addrs,
	},
	{ }
};

/* ocp2scp_usb_phy */
static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
	.name		= "ocp2scp_usb_phy",
@@ -2737,7 +2717,6 @@ static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
			.modulemode   = MODULEMODE_HWCTRL,
		},
	},
	.dev_attr	= ocp2scp_dev_attr,
};

/*
+0 −60
Original line number Diff line number Diff line
@@ -22,26 +22,6 @@
#include <linux/pm_runtime.h>
#include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/platform_data/omap_ocp2scp.h>

/**
 * _count_resources - count for the number of resources
 * @res: struct resource *
 *
 * Count and return the number of resources populated for the device that is
 * connected to ocp2scp.
 */
static unsigned _count_resources(struct resource *res)
{
	int cnt	= 0;

	while (res->start != res->end) {
		cnt++;
		res++;
	}

	return cnt;
}

static int ocp2scp_remove_devices(struct device *dev, void *c)
{
@@ -55,11 +35,7 @@ static int ocp2scp_remove_devices(struct device *dev, void *c)
static int omap_ocp2scp_probe(struct platform_device *pdev)
{
	int ret;
	unsigned res_cnt, i;
	struct device_node *np = pdev->dev.of_node;
	struct platform_device *pdev_child;
	struct omap_ocp2scp_platform_data *pdata = pdev->dev.platform_data;
	struct omap_ocp2scp_dev *dev;

	if (np) {
		ret = of_platform_populate(np, NULL, NULL, &pdev->dev);
@@ -68,48 +44,12 @@ static int omap_ocp2scp_probe(struct platform_device *pdev)
			    "failed to add resources for ocp2scp child\n");
			goto err0;
		}
	} else if (pdata) {
		for (i = 0, dev = *pdata->devices; i < pdata->dev_cnt; i++,
		    dev++) {
			res_cnt = _count_resources(dev->res);

			pdev_child = platform_device_alloc(dev->drv_name,
			    PLATFORM_DEVID_AUTO);
			if (!pdev_child) {
				dev_err(&pdev->dev,
				  "failed to allocate mem for ocp2scp child\n");
				goto err0;
			}

			ret = platform_device_add_resources(pdev_child,
			    dev->res, res_cnt);
			if (ret) {
				dev_err(&pdev->dev,
				 "failed to add resources for ocp2scp child\n");
				goto err1;
			}

			pdev_child->dev.parent	= &pdev->dev;

			ret = platform_device_add(pdev_child);
			if (ret) {
				dev_err(&pdev->dev,
				   "failed to register ocp2scp child device\n");
				goto err1;
			}
		}
	} else {
		dev_err(&pdev->dev, "OCP2SCP initialized without plat data\n");
		return -EINVAL;
	}

	pm_runtime_enable(&pdev->dev);

	return 0;

err1:
	platform_device_put(pdev_child);

err0:
	device_for_each_child(&pdev->dev, NULL, ocp2scp_remove_devices);

+0 −31
Original line number Diff line number Diff line
/*
 * omap_ocp2scp.h -- ocp2scp header file
 *
 * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * Author: Kishon Vijay Abraham I <kishon@ti.com>
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 */

#ifndef __DRIVERS_OMAP_OCP2SCP_H
#define __DRIVERS_OMAP_OCP2SCP_H

struct omap_ocp2scp_dev {
	const char			*drv_name;
	struct resource			*res;
};

struct omap_ocp2scp_platform_data {
	int				dev_cnt;
	struct omap_ocp2scp_dev		**devices;
};
#endif /* __DRIVERS_OMAP_OCP2SCP_H */