static void mapphone_panel_remove(struct omap_dss_device *dssdev)
{
	void *handle;
	struct mapphone_data *data = (struct mapphone_data *) dssdev->data;

	handle = data->panel_handle;
	omap_panel_unregister(handle);

	kfree(dssdev->data);
	return;
}
Example #2
0
static void mapphone_panel_remove(struct omap_dss_device *dssdev)
{
	void *handle;
	struct mapphone_data *data = (struct mapphone_data *) dssdev->data;

	atomic_set(&data->state, PANEL_OFF);
	wake_up(&data->wait);
	cancel_work_sync(&data->work);

	handle = data->panel_handle;
	omap_panel_unregister(handle);

	kfree(dssdev->data);
	return;
}
static int mapphone_panel_probe(struct omap_dss_device *dssdev)
{
	int error;
	int pixel_size = 24;
	struct mapphone_data *data;
	struct omap_panel_device panel_dev;

	DBG("probe\n");

	data = kmalloc(sizeof(struct mapphone_data), GFP_KERNEL);
	if (!data)
		return -ENOMEM;

	memset(data, 0, sizeof(data));

	data->te_scan_line = 0x300;  /* default value for WVGA display */
	data->dssdev = dssdev;
	dssdev->data = data;

	if (mapphone_panel_dt_panel_probe(dssdev, &pixel_size))
		printk(KERN_INFO "panel: using non-dt configuration\n");

	panel_print_dt(dssdev);
	dssdev->ctrl.pixel_size = pixel_size;
	dssdev->panel.config = OMAP_DSS_LCD_TFT;
	dssdev->panel.timings = mapphone_panel_timings;

	strncpy(panel_dev.name, dssdev->name, OMAP_PANEL_MAX_NAME_SIZE);
	panel_dev.fod_disable = mapphone_panel_disable_local;
	panel_dev.dssdev = dssdev;
	data->panel_handle = omap_panel_register(&panel_dev);
	if (data->panel_handle == NULL) {
		printk(KERN_ERR "Panel Register Failed\n");
		goto freedata;
	}

	error = device_create_file(&panel_dev.dssdev->dev,
		&dev_attr_supplier_id);
	if (error < 0) {
		pr_err("%s: device supplier_id create failed: %d\n",
			__func__, error);
		goto unregister;
	}

	error = device_create_file(&panel_dev.dssdev->dev,
		&dev_attr_supplier_name);
	if (error < 0) {
		pr_err("%s: device supplier_name create failed: %d\n",
			__func__, error);
		goto removeattr;
	}

	atomic_set(&data->state, PANEL_OFF);

	return 0;

removeattr:
	device_remove_file(&panel_dev.dssdev->dev, &dev_attr_supplier_id);
unregister:
	omap_panel_unregister(data->panel_handle);
freedata:
	kfree(data);
	data = NULL;

	return -ENODEV;
}