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

Commit 7e17fc0b authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'omapdss-for-3.10-fixes' of git://gitorious.org/linux-omap-dss2/linux into drm-next

OMAPDSS fixes for 3.10:

* Compilation fix when DSI is disabled in Kconfig
* Basic deferred probe support to fix DT boot

* tag 'omapdss-for-3.10-fixes' of git://gitorious.org/linux-omap-dss2/linux:
  OMAPDSS: TFP410: return EPROBE_DEFER if the i2c adapter not found
  OMAPDSS: VENC: Add error handling for venc_probe_pdata
  OMAPDSS: HDMI: Add error handling for hdmi_probe_pdata
  OMAPDSS: RFBI: Add error handling for rfbi_probe_pdata
  OMAPDSS: DSI: Add error handling for dsi_probe_pdata
  OMAPDSS: SDI: Add error handling for sdi_probe_pdata
  OMAPDSS: DPI: Add error handling for dpi_probe_pdata
  OMAPDSS: VENC: use platform_driver_register()
  OMAPDSS: HDMI: use platform_driver_register()
  OMAPDSS: RFBI: use platform_driver_register()
  OMAPDSS: DSI: use platform_driver_register()
  OMAPDSS: SDI: use platform_driver_register()
  OMAPDSS: DPI: use platform_driver_register()
  OMAPFB: defer probe if no displays
  OMAPFB: use module_platform_driver()
  OMAPDSS: Makefile: move omapfb after panels
  OMAPDSS: DPI: fix compilation if DSI not compiled in
parents 61109488 bca39130
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
obj-$(CONFIG_OMAP2_VRFB) += vrfb.o
obj-$(CONFIG_OMAP2_VRFB) += vrfb.o


obj-$(CONFIG_OMAP2_DSS) += dss/
obj-$(CONFIG_OMAP2_DSS) += dss/
obj-$(CONFIG_FB_OMAP2) += omapfb/
obj-y += displays/
obj-y += displays/
obj-$(CONFIG_FB_OMAP2) += omapfb/
+1 −1
Original line number Original line Diff line number Diff line
@@ -135,7 +135,7 @@ static int tfp410_probe(struct omap_dss_device *dssdev)
		if (!adapter) {
		if (!adapter) {
			dev_err(&dssdev->dev, "Failed to get I2C adapter, bus %d\n",
			dev_err(&dssdev->dev, "Failed to get I2C adapter, bus %d\n",
					i2c_bus_num);
					i2c_bus_num);
			return -EINVAL;
			return -EPROBE_DEFER;
		}
		}


		ddata->i2c_adapter = adapter;
		ddata->i2c_adapter = adapter;
+22 −13
Original line number Original line Diff line number Diff line
@@ -520,7 +520,7 @@ void omapdss_dpi_set_data_lines(struct omap_dss_device *dssdev, int data_lines)
}
}
EXPORT_SYMBOL(omapdss_dpi_set_data_lines);
EXPORT_SYMBOL(omapdss_dpi_set_data_lines);


static int __init dpi_verify_dsi_pll(struct platform_device *dsidev)
static int dpi_verify_dsi_pll(struct platform_device *dsidev)
{
{
	int r;
	int r;


@@ -572,7 +572,7 @@ static enum omap_channel dpi_get_channel(void)
	}
	}
}
}


static int __init dpi_init_display(struct omap_dss_device *dssdev)
static int dpi_init_display(struct omap_dss_device *dssdev)
{
{
	struct platform_device *dsidev;
	struct platform_device *dsidev;


@@ -607,7 +607,7 @@ static int __init dpi_init_display(struct omap_dss_device *dssdev)
	return 0;
	return 0;
}
}


static struct omap_dss_device * __init dpi_find_dssdev(struct platform_device *pdev)
static struct omap_dss_device *dpi_find_dssdev(struct platform_device *pdev)
{
{
	struct omap_dss_board_info *pdata = pdev->dev.platform_data;
	struct omap_dss_board_info *pdata = pdev->dev.platform_data;
	const char *def_disp_name = omapdss_get_default_display_name();
	const char *def_disp_name = omapdss_get_default_display_name();
@@ -635,7 +635,7 @@ static struct omap_dss_device * __init dpi_find_dssdev(struct platform_device *p
	return def_dssdev;
	return def_dssdev;
}
}


static void __init dpi_probe_pdata(struct platform_device *dpidev)
static int dpi_probe_pdata(struct platform_device *dpidev)
{
{
	struct omap_dss_device *plat_dssdev;
	struct omap_dss_device *plat_dssdev;
	struct omap_dss_device *dssdev;
	struct omap_dss_device *dssdev;
@@ -644,11 +644,11 @@ static void __init dpi_probe_pdata(struct platform_device *dpidev)
	plat_dssdev = dpi_find_dssdev(dpidev);
	plat_dssdev = dpi_find_dssdev(dpidev);


	if (!plat_dssdev)
	if (!plat_dssdev)
		return;
		return 0;


	dssdev = dss_alloc_and_init_device(&dpidev->dev);
	dssdev = dss_alloc_and_init_device(&dpidev->dev);
	if (!dssdev)
	if (!dssdev)
		return;
		return -ENOMEM;


	dss_copy_device_pdata(dssdev, plat_dssdev);
	dss_copy_device_pdata(dssdev, plat_dssdev);


@@ -656,7 +656,7 @@ static void __init dpi_probe_pdata(struct platform_device *dpidev)
	if (r) {
	if (r) {
		DSSERR("device %s init failed: %d\n", dssdev->name, r);
		DSSERR("device %s init failed: %d\n", dssdev->name, r);
		dss_put_device(dssdev);
		dss_put_device(dssdev);
		return;
		return r;
	}
	}


	r = omapdss_output_set_device(&dpi.output, dssdev);
	r = omapdss_output_set_device(&dpi.output, dssdev);
@@ -664,7 +664,7 @@ static void __init dpi_probe_pdata(struct platform_device *dpidev)
		DSSERR("failed to connect output to new device: %s\n",
		DSSERR("failed to connect output to new device: %s\n",
				dssdev->name);
				dssdev->name);
		dss_put_device(dssdev);
		dss_put_device(dssdev);
		return;
		return r;
	}
	}


	r = dss_add_device(dssdev);
	r = dss_add_device(dssdev);
@@ -672,11 +672,13 @@ static void __init dpi_probe_pdata(struct platform_device *dpidev)
		DSSERR("device %s register failed: %d\n", dssdev->name, r);
		DSSERR("device %s register failed: %d\n", dssdev->name, r);
		omapdss_output_unset_device(&dpi.output);
		omapdss_output_unset_device(&dpi.output);
		dss_put_device(dssdev);
		dss_put_device(dssdev);
		return;
		return r;
	}
	}

	return 0;
}
}


static void __init dpi_init_output(struct platform_device *pdev)
static void dpi_init_output(struct platform_device *pdev)
{
{
	struct omap_dss_output *out = &dpi.output;
	struct omap_dss_output *out = &dpi.output;


@@ -696,13 +698,19 @@ static void __exit dpi_uninit_output(struct platform_device *pdev)
	dss_unregister_output(out);
	dss_unregister_output(out);
}
}


static int __init omap_dpi_probe(struct platform_device *pdev)
static int omap_dpi_probe(struct platform_device *pdev)
{
{
	int r;

	mutex_init(&dpi.lock);
	mutex_init(&dpi.lock);


	dpi_init_output(pdev);
	dpi_init_output(pdev);


	dpi_probe_pdata(pdev);
	r = dpi_probe_pdata(pdev);
	if (r) {
		dpi_uninit_output(pdev);
		return r;
	}


	return 0;
	return 0;
}
}
@@ -717,6 +725,7 @@ static int __exit omap_dpi_remove(struct platform_device *pdev)
}
}


static struct platform_driver omap_dpi_driver = {
static struct platform_driver omap_dpi_driver = {
	.probe		= omap_dpi_probe,
	.remove         = __exit_p(omap_dpi_remove),
	.remove         = __exit_p(omap_dpi_remove),
	.driver         = {
	.driver         = {
		.name   = "omapdss_dpi",
		.name   = "omapdss_dpi",
@@ -726,7 +735,7 @@ static struct platform_driver omap_dpi_driver = {


int __init dpi_init_platform_driver(void)
int __init dpi_init_platform_driver(void)
{
{
	return platform_driver_probe(&omap_dpi_driver, omap_dpi_probe);
	return platform_driver_register(&omap_dpi_driver);
}
}


void __exit dpi_uninit_platform_driver(void)
void __exit dpi_uninit_platform_driver(void)
+22 −13
Original line number Original line Diff line number Diff line
@@ -5225,7 +5225,7 @@ static enum omap_channel dsi_get_channel(int module_id)
	}
	}
}
}


static int __init dsi_init_display(struct omap_dss_device *dssdev)
static int dsi_init_display(struct omap_dss_device *dssdev)
{
{
	struct platform_device *dsidev =
	struct platform_device *dsidev =
			dsi_get_dsidev_from_id(dssdev->phy.dsi.module);
			dsi_get_dsidev_from_id(dssdev->phy.dsi.module);
@@ -5366,7 +5366,7 @@ static int dsi_get_clocks(struct platform_device *dsidev)
	return 0;
	return 0;
}
}


static struct omap_dss_device * __init dsi_find_dssdev(struct platform_device *pdev)
static struct omap_dss_device *dsi_find_dssdev(struct platform_device *pdev)
{
{
	struct omap_dss_board_info *pdata = pdev->dev.platform_data;
	struct omap_dss_board_info *pdata = pdev->dev.platform_data;
	struct dsi_data *dsi = dsi_get_dsidrv_data(pdev);
	struct dsi_data *dsi = dsi_get_dsidrv_data(pdev);
@@ -5398,7 +5398,7 @@ static struct omap_dss_device * __init dsi_find_dssdev(struct platform_device *p
	return def_dssdev;
	return def_dssdev;
}
}


static void __init dsi_probe_pdata(struct platform_device *dsidev)
static int dsi_probe_pdata(struct platform_device *dsidev)
{
{
	struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
	struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
	struct omap_dss_device *plat_dssdev;
	struct omap_dss_device *plat_dssdev;
@@ -5408,11 +5408,11 @@ static void __init dsi_probe_pdata(struct platform_device *dsidev)
	plat_dssdev = dsi_find_dssdev(dsidev);
	plat_dssdev = dsi_find_dssdev(dsidev);


	if (!plat_dssdev)
	if (!plat_dssdev)
		return;
		return 0;


	dssdev = dss_alloc_and_init_device(&dsidev->dev);
	dssdev = dss_alloc_and_init_device(&dsidev->dev);
	if (!dssdev)
	if (!dssdev)
		return;
		return -ENOMEM;


	dss_copy_device_pdata(dssdev, plat_dssdev);
	dss_copy_device_pdata(dssdev, plat_dssdev);


@@ -5420,7 +5420,7 @@ static void __init dsi_probe_pdata(struct platform_device *dsidev)
	if (r) {
	if (r) {
		DSSERR("device %s init failed: %d\n", dssdev->name, r);
		DSSERR("device %s init failed: %d\n", dssdev->name, r);
		dss_put_device(dssdev);
		dss_put_device(dssdev);
		return;
		return r;
	}
	}


	r = omapdss_output_set_device(&dsi->output, dssdev);
	r = omapdss_output_set_device(&dsi->output, dssdev);
@@ -5428,7 +5428,7 @@ static void __init dsi_probe_pdata(struct platform_device *dsidev)
		DSSERR("failed to connect output to new device: %s\n",
		DSSERR("failed to connect output to new device: %s\n",
				dssdev->name);
				dssdev->name);
		dss_put_device(dssdev);
		dss_put_device(dssdev);
		return;
		return r;
	}
	}


	r = dss_add_device(dssdev);
	r = dss_add_device(dssdev);
@@ -5436,11 +5436,13 @@ static void __init dsi_probe_pdata(struct platform_device *dsidev)
		DSSERR("device %s register failed: %d\n", dssdev->name, r);
		DSSERR("device %s register failed: %d\n", dssdev->name, r);
		omapdss_output_unset_device(&dsi->output);
		omapdss_output_unset_device(&dsi->output);
		dss_put_device(dssdev);
		dss_put_device(dssdev);
		return;
		return r;
	}
	}

	return 0;
}
}


static void __init dsi_init_output(struct platform_device *dsidev)
static void dsi_init_output(struct platform_device *dsidev)
{
{
	struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
	struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
	struct omap_dss_output *out = &dsi->output;
	struct omap_dss_output *out = &dsi->output;
@@ -5456,7 +5458,7 @@ static void __init dsi_init_output(struct platform_device *dsidev)
	dss_register_output(out);
	dss_register_output(out);
}
}


static void __exit dsi_uninit_output(struct platform_device *dsidev)
static void dsi_uninit_output(struct platform_device *dsidev)
{
{
	struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
	struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
	struct omap_dss_output *out = &dsi->output;
	struct omap_dss_output *out = &dsi->output;
@@ -5465,7 +5467,7 @@ static void __exit dsi_uninit_output(struct platform_device *dsidev)
}
}


/* DSI1 HW IP initialisation */
/* DSI1 HW IP initialisation */
static int __init omap_dsihw_probe(struct platform_device *dsidev)
static int omap_dsihw_probe(struct platform_device *dsidev)
{
{
	u32 rev;
	u32 rev;
	int r, i;
	int r, i;
@@ -5561,7 +5563,13 @@ static int __init omap_dsihw_probe(struct platform_device *dsidev)


	dsi_init_output(dsidev);
	dsi_init_output(dsidev);


	dsi_probe_pdata(dsidev);
	r = dsi_probe_pdata(dsidev);
	if (r) {
		dsi_runtime_put(dsidev);
		dsi_uninit_output(dsidev);
		pm_runtime_disable(&dsidev->dev);
		return r;
	}


	dsi_runtime_put(dsidev);
	dsi_runtime_put(dsidev);


@@ -5632,6 +5640,7 @@ static const struct dev_pm_ops dsi_pm_ops = {
};
};


static struct platform_driver omap_dsihw_driver = {
static struct platform_driver omap_dsihw_driver = {
	.probe		= omap_dsihw_probe,
	.remove         = __exit_p(omap_dsihw_remove),
	.remove         = __exit_p(omap_dsihw_remove),
	.driver         = {
	.driver         = {
		.name   = "omapdss_dsi",
		.name   = "omapdss_dsi",
@@ -5642,7 +5651,7 @@ static struct platform_driver omap_dsihw_driver = {


int __init dsi_init_platform_driver(void)
int __init dsi_init_platform_driver(void)
{
{
	return platform_driver_probe(&omap_dsihw_driver, omap_dsihw_probe);
	return platform_driver_register(&omap_dsihw_driver);
}
}


void __exit dsi_uninit_platform_driver(void)
void __exit dsi_uninit_platform_driver(void)
+27 −4
Original line number Original line Diff line number Diff line
@@ -277,6 +277,12 @@ int sdi_init_platform_driver(void) __init;
void sdi_uninit_platform_driver(void) __exit;
void sdi_uninit_platform_driver(void) __exit;


/* DSI */
/* DSI */

typedef bool (*dsi_pll_calc_func)(int regn, int regm, unsigned long fint,
		unsigned long pll, void *data);
typedef bool (*dsi_hsdiv_calc_func)(int regm_dispc, unsigned long dispc,
		void *data);

#ifdef CONFIG_OMAP2_DSS_DSI
#ifdef CONFIG_OMAP2_DSS_DSI


struct dentry;
struct dentry;
@@ -295,10 +301,6 @@ u8 dsi_get_pixel_size(enum omap_dss_dsi_pixel_format fmt);


unsigned long dsi_get_pll_clkin(struct platform_device *dsidev);
unsigned long dsi_get_pll_clkin(struct platform_device *dsidev);


typedef bool (*dsi_pll_calc_func)(int regn, int regm, unsigned long fint,
		unsigned long pll, void *data);
typedef bool (*dsi_hsdiv_calc_func)(int regm_dispc, unsigned long dispc,
		void *data);
bool dsi_hsdiv_calc(struct platform_device *dsidev, unsigned long pll,
bool dsi_hsdiv_calc(struct platform_device *dsidev, unsigned long pll,
		unsigned long out_min, dsi_hsdiv_calc_func func, void *data);
		unsigned long out_min, dsi_hsdiv_calc_func func, void *data);
bool dsi_pll_calc(struct platform_device *dsidev, unsigned long clkin,
bool dsi_pll_calc(struct platform_device *dsidev, unsigned long clkin,
@@ -358,6 +360,27 @@ static inline struct platform_device *dsi_get_dsidev_from_id(int module)
{
{
	return NULL;
	return NULL;
}
}

static inline unsigned long dsi_get_pll_clkin(struct platform_device *dsidev)
{
	return 0;
}

static inline bool dsi_hsdiv_calc(struct platform_device *dsidev,
		unsigned long pll, unsigned long out_min,
		dsi_hsdiv_calc_func func, void *data)
{
	return false;
}

static inline bool dsi_pll_calc(struct platform_device *dsidev,
		unsigned long clkin,
		unsigned long pll_min, unsigned long pll_max,
		dsi_pll_calc_func func, void *data)
{
	return false;
}

#endif
#endif


/* DPI */
/* DPI */
Loading