| From fa68296bef3a5f65919df72cfda225ad99bd31b0 Mon Sep 17 00:00:00 2001 |
| From: Jyri Sarha <jsarha@ti.com> |
| Date: Fri, 3 Nov 2017 12:54:01 +0200 |
| Subject: [PATCH 0932/1795] drm/tilcdc: Remove obsolete "ti,tilcdc,slave" dts |
| binding support |
| |
| This patch removes DRM_TILCDC_SLAVE_COMPAT option for supporting the |
| obsolete "ti,tilcdc,slave" device tree binding. The new of_graph based |
| binding - that is widely used in other drm driver too - has been |
| supported since Linux v4.2. Maintaining the the backwards dts |
| conversion code in the DRM_TILCDC_SLAVE_COMPAT has become a nuisance |
| for the device/of development so the we decided to drop it after Linux |
| v4.14, the 2017 LTS. |
| |
| Signed-off-by: Jyri Sarha <jsarha@ti.com> |
| Acked-by: Rob Herring <robh@kernel.org> |
| (cherry picked from commit 739acd85ffdb725a8ef206737875f4b2c1dad02a) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| |
| Conflicts: |
| drivers/gpu/drm/tilcdc/tilcdc_slave_compat.c |
| --- |
| drivers/gpu/drm/tilcdc/Kconfig | 11 - |
| drivers/gpu/drm/tilcdc/Makefile | 3 - |
| drivers/gpu/drm/tilcdc/tilcdc_slave_compat.c | 270 ------------------ |
| .../gpu/drm/tilcdc/tilcdc_slave_compat.dts | 72 ----- |
| drivers/gpu/drm/tilcdc/tilcdc_slave_compat.h | 25 -- |
| 5 files changed, 381 deletions(-) |
| delete mode 100644 drivers/gpu/drm/tilcdc/tilcdc_slave_compat.c |
| delete mode 100644 drivers/gpu/drm/tilcdc/tilcdc_slave_compat.dts |
| delete mode 100644 drivers/gpu/drm/tilcdc/tilcdc_slave_compat.h |
| |
| diff --git a/drivers/gpu/drm/tilcdc/Kconfig b/drivers/gpu/drm/tilcdc/Kconfig |
| index 28fed7e206d0..81ac82455ce4 100644 |
| --- a/drivers/gpu/drm/tilcdc/Kconfig |
| +++ b/drivers/gpu/drm/tilcdc/Kconfig |
| @@ -12,14 +12,3 @@ config DRM_TILCDC |
| controller, for example AM33xx in beagle-bone, DA8xx, or |
| OMAP-L1xx. This driver replaces the FB_DA8XX fbdev driver. |
| |
| -config DRM_TILCDC_SLAVE_COMPAT |
| - bool "Support device tree blobs using TI LCDC Slave binding" |
| - depends on DRM_TILCDC |
| - default y |
| - select OF_RESOLVE |
| - select OF_OVERLAY |
| - help |
| - Choose this option if you need a kernel that is compatible |
| - with device tree blobs using the obsolete "ti,tilcdc,slave" |
| - binding. If you find "ti,tilcdc,slave"-string from your DTB, |
| - you probably need this. Otherwise you do not. |
| diff --git a/drivers/gpu/drm/tilcdc/Makefile b/drivers/gpu/drm/tilcdc/Makefile |
| index b9e1108e5b4e..87f9480e43b0 100644 |
| --- a/drivers/gpu/drm/tilcdc/Makefile |
| +++ b/drivers/gpu/drm/tilcdc/Makefile |
| @@ -3,9 +3,6 @@ ifeq (, $(findstring -W,$(EXTRA_CFLAGS))) |
| ccflags-y += -Werror |
| endif |
| |
| -obj-$(CONFIG_DRM_TILCDC_SLAVE_COMPAT) += tilcdc_slave_compat.o \ |
| - tilcdc_slave_compat.dtb.o |
| - |
| tilcdc-y := \ |
| tilcdc_plane.o \ |
| tilcdc_crtc.o \ |
| diff --git a/drivers/gpu/drm/tilcdc/tilcdc_slave_compat.c b/drivers/gpu/drm/tilcdc/tilcdc_slave_compat.c |
| deleted file mode 100644 |
| index 71a4bb953273..000000000000 |
| --- a/drivers/gpu/drm/tilcdc/tilcdc_slave_compat.c |
| +++ /dev/null |
| @@ -1,270 +0,0 @@ |
| -/* |
| - * Copyright (C) 2015 Texas Instruments |
| - * Author: Jyri Sarha <jsarha@ti.com> |
| - * |
| - * This program is free software; you can redistribute it and/or modify it |
| - * under the terms of the GNU General Public License version 2 as published by |
| - * the Free Software Foundation. |
| - * |
| - */ |
| - |
| -/* |
| - * To support the old "ti,tilcdc,slave" binding the binding has to be |
| - * transformed to the new external encoder binding. |
| - */ |
| - |
| -#include <linux/kernel.h> |
| -#include <linux/of.h> |
| -#include <linux/of_graph.h> |
| -#include <linux/of_fdt.h> |
| -#include <linux/slab.h> |
| -#include <linux/list.h> |
| - |
| -#include "tilcdc_slave_compat.h" |
| - |
| -struct kfree_table { |
| - int total; |
| - int num; |
| - void **table; |
| -}; |
| - |
| -static int __init kfree_table_init(struct kfree_table *kft) |
| -{ |
| - kft->total = 32; |
| - kft->num = 0; |
| - kft->table = kmalloc(kft->total * sizeof(*kft->table), |
| - GFP_KERNEL); |
| - if (!kft->table) |
| - return -ENOMEM; |
| - |
| - return 0; |
| -} |
| - |
| -static int __init kfree_table_add(struct kfree_table *kft, void *p) |
| -{ |
| - if (kft->num == kft->total) { |
| - void **old = kft->table; |
| - |
| - kft->total *= 2; |
| - kft->table = krealloc(old, kft->total * sizeof(*kft->table), |
| - GFP_KERNEL); |
| - if (!kft->table) { |
| - kft->table = old; |
| - kfree(p); |
| - return -ENOMEM; |
| - } |
| - } |
| - kft->table[kft->num++] = p; |
| - return 0; |
| -} |
| - |
| -static void __init kfree_table_free(struct kfree_table *kft) |
| -{ |
| - int i; |
| - |
| - for (i = 0; i < kft->num; i++) |
| - kfree(kft->table[i]); |
| - |
| - kfree(kft->table); |
| -} |
| - |
| -static |
| -struct property * __init tilcdc_prop_dup(const struct property *prop, |
| - struct kfree_table *kft) |
| -{ |
| - struct property *nprop; |
| - |
| - nprop = kzalloc(sizeof(*nprop), GFP_KERNEL); |
| - if (!nprop || kfree_table_add(kft, nprop)) |
| - return NULL; |
| - |
| - nprop->name = kstrdup(prop->name, GFP_KERNEL); |
| - if (!nprop->name || kfree_table_add(kft, nprop->name)) |
| - return NULL; |
| - |
| - nprop->value = kmemdup(prop->value, prop->length, GFP_KERNEL); |
| - if (!nprop->value || kfree_table_add(kft, nprop->value)) |
| - return NULL; |
| - |
| - nprop->length = prop->length; |
| - |
| - return nprop; |
| -} |
| - |
| -static void __init tilcdc_copy_props(struct device_node *from, |
| - struct device_node *to, |
| - const char * const props[], |
| - struct kfree_table *kft) |
| -{ |
| - struct property *prop; |
| - int i; |
| - |
| - for (i = 0; props[i]; i++) { |
| - prop = of_find_property(from, props[i], NULL); |
| - if (!prop) |
| - continue; |
| - |
| - prop = tilcdc_prop_dup(prop, kft); |
| - if (!prop) |
| - continue; |
| - |
| - prop->next = to->properties; |
| - to->properties = prop; |
| - } |
| -} |
| - |
| -static int __init tilcdc_prop_str_update(struct property *prop, |
| - const char *str, |
| - struct kfree_table *kft) |
| -{ |
| - prop->value = kstrdup(str, GFP_KERNEL); |
| - if (kfree_table_add(kft, prop->value) || !prop->value) |
| - return -ENOMEM; |
| - prop->length = strlen(str)+1; |
| - return 0; |
| -} |
| - |
| -static void __init tilcdc_node_disable(struct device_node *node) |
| -{ |
| - struct property *prop; |
| - |
| - prop = kzalloc(sizeof(*prop), GFP_KERNEL); |
| - if (!prop) |
| - return; |
| - |
| - prop->name = "status"; |
| - prop->value = "disabled"; |
| - prop->length = strlen((char *)prop->value)+1; |
| - |
| - of_update_property(node, prop); |
| -} |
| - |
| -static struct device_node * __init tilcdc_get_overlay(struct kfree_table *kft) |
| -{ |
| - const int size = __dtb_tilcdc_slave_compat_end - |
| - __dtb_tilcdc_slave_compat_begin; |
| - static void *overlay_data; |
| - struct device_node *overlay; |
| - |
| - if (!size) { |
| - pr_warn("%s: No overlay data\n", __func__); |
| - return NULL; |
| - } |
| - |
| - overlay_data = kmemdup(__dtb_tilcdc_slave_compat_begin, |
| - size, GFP_KERNEL); |
| - if (!overlay_data || kfree_table_add(kft, overlay_data)) |
| - return NULL; |
| - |
| - of_fdt_unflatten_tree(overlay_data, NULL, &overlay); |
| - if (!overlay) { |
| - pr_warn("%s: Unfattening overlay tree failed\n", __func__); |
| - return NULL; |
| - } |
| - |
| - ret = of_resolve_phandles(overlay); |
| - if (ret) { |
| - pr_err("%s: Failed to resolve phandles: %d\n", __func__, ret); |
| - return NULL; |
| - } |
| - |
| - return overlay; |
| -} |
| - |
| -static const struct of_device_id tilcdc_slave_of_match[] __initconst = { |
| - { .compatible = "ti,tilcdc,slave", }, |
| - {}, |
| -}; |
| - |
| -static const struct of_device_id tilcdc_of_match[] __initconst = { |
| - { .compatible = "ti,am33xx-tilcdc", }, |
| - {}, |
| -}; |
| - |
| -static const struct of_device_id tilcdc_tda998x_of_match[] __initconst = { |
| - { .compatible = "nxp,tda998x", }, |
| - {}, |
| -}; |
| - |
| -static const char * const tilcdc_slave_props[] __initconst = { |
| - "pinctrl-names", |
| - "pinctrl-0", |
| - "pinctrl-1", |
| - NULL |
| -}; |
| - |
| -static void __init tilcdc_convert_slave_node(void) |
| -{ |
| - struct device_node *slave = NULL, *lcdc = NULL; |
| - struct device_node *i2c = NULL, *fragment = NULL; |
| - struct device_node *overlay, *encoder; |
| - struct property *prop; |
| - /* For all memory needed for the overlay tree. This memory can |
| - be freed after the overlay has been applied. */ |
| - struct kfree_table kft; |
| - int ovcs_id, ret; |
| - |
| - if (kfree_table_init(&kft)) |
| - return; |
| - |
| - lcdc = of_find_matching_node(NULL, tilcdc_of_match); |
| - slave = of_find_matching_node(NULL, tilcdc_slave_of_match); |
| - |
| - if (!slave || !of_device_is_available(lcdc)) |
| - goto out; |
| - |
| - i2c = of_parse_phandle(slave, "i2c", 0); |
| - if (!i2c) { |
| - pr_err("%s: Can't find i2c node trough phandle\n", __func__); |
| - goto out; |
| - } |
| - |
| - overlay = tilcdc_get_overlay(&kft); |
| - if (!overlay) |
| - goto out; |
| - |
| - encoder = of_find_matching_node(overlay, tilcdc_tda998x_of_match); |
| - if (!encoder) { |
| - pr_err("%s: Failed to find tda998x node\n", __func__); |
| - goto out; |
| - } |
| - |
| - tilcdc_copy_props(slave, encoder, tilcdc_slave_props, &kft); |
| - |
| - for_each_child_of_node(overlay, fragment) { |
| - prop = of_find_property(fragment, "target-path", NULL); |
| - if (!prop) |
| - continue; |
| - if (!strncmp("i2c", (char *)prop->value, prop->length)) |
| - if (tilcdc_prop_str_update(prop, i2c->full_name, &kft)) |
| - goto out; |
| - if (!strncmp("lcdc", (char *)prop->value, prop->length)) |
| - if (tilcdc_prop_str_update(prop, lcdc->full_name, &kft)) |
| - goto out; |
| - } |
| - |
| - tilcdc_node_disable(slave); |
| - |
| - ovcs_id = 0; |
| - ret = of_overlay_apply(overlay, &ovcs_id); |
| - if (ret) |
| - pr_err("%s: Applying overlay changeset failed: %d\n", |
| - __func__, ret); |
| - else |
| - pr_info("%s: ti,tilcdc,slave node successfully converted\n", |
| - __func__); |
| -out: |
| - kfree_table_free(&kft); |
| - of_node_put(i2c); |
| - of_node_put(slave); |
| - of_node_put(lcdc); |
| - of_node_put(fragment); |
| -} |
| - |
| -static int __init tilcdc_slave_compat_init(void) |
| -{ |
| - tilcdc_convert_slave_node(); |
| - return 0; |
| -} |
| - |
| -subsys_initcall(tilcdc_slave_compat_init); |
| diff --git a/drivers/gpu/drm/tilcdc/tilcdc_slave_compat.dts b/drivers/gpu/drm/tilcdc/tilcdc_slave_compat.dts |
| deleted file mode 100644 |
| index 693f8b0aea2d..000000000000 |
| --- a/drivers/gpu/drm/tilcdc/tilcdc_slave_compat.dts |
| +++ /dev/null |
| @@ -1,72 +0,0 @@ |
| -/* |
| - * DTS overlay for converting ti,tilcdc,slave binding to new binding. |
| - * |
| - * Copyright (C) 2015 Texas Instruments Inc. |
| - * Author: Jyri Sarha <jsarha@ti.com> |
| - * |
| - * This program is free software; you can redistribute it and/or |
| - * modify it under the terms of the GNU General Public License |
| - * version 2 as published by the Free Software Foundation. |
| - */ |
| - |
| -/* |
| - * target-path property values are simple tags that are replaced with |
| - * correct values in tildcdc_slave_compat.c. Some properties are also |
| - * copied over from the ti,tilcdc,slave node. |
| - */ |
| - |
| -/dts-v1/; |
| -/ { |
| - fragment@0 { |
| - target-path = "i2c"; |
| - __overlay__ { |
| - #address-cells = <1>; |
| - #size-cells = <0>; |
| - tda19988 { |
| - compatible = "nxp,tda998x"; |
| - reg = <0x70>; |
| - status = "okay"; |
| - |
| - port { |
| - hdmi_0: endpoint@0 { |
| - remote-endpoint = <&lcd_0>; |
| - }; |
| - }; |
| - }; |
| - }; |
| - }; |
| - |
| - fragment@1 { |
| - target-path = "lcdc"; |
| - __overlay__ { |
| - port { |
| - lcd_0: endpoint@0 { |
| - remote-endpoint = <&hdmi_0>; |
| - }; |
| - }; |
| - }; |
| - }; |
| - |
| - __local_fixups__ { |
| - fragment@0 { |
| - __overlay__ { |
| - tda19988 { |
| - port { |
| - endpoint@0 { |
| - remote-endpoint = <0>; |
| - }; |
| - }; |
| - }; |
| - }; |
| - }; |
| - fragment@1 { |
| - __overlay__ { |
| - port { |
| - endpoint@0 { |
| - remote-endpoint = <0>; |
| - }; |
| - }; |
| - }; |
| - }; |
| - }; |
| -}; |
| diff --git a/drivers/gpu/drm/tilcdc/tilcdc_slave_compat.h b/drivers/gpu/drm/tilcdc/tilcdc_slave_compat.h |
| deleted file mode 100644 |
| index 403d35d87d0b..000000000000 |
| --- a/drivers/gpu/drm/tilcdc/tilcdc_slave_compat.h |
| +++ /dev/null |
| @@ -1,25 +0,0 @@ |
| -/* |
| - * Copyright (C) 2015 Texas Instruments |
| - * Author: Jyri Sarha <jsarha@ti.com> |
| - * |
| - * This program is free software; you can redistribute it and/or modify it |
| - * under the terms of the GNU General Public License version 2 as published by |
| - * the Free Software Foundation. |
| - * |
| - * 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. |
| - * |
| - * You should have received a copy of the GNU General Public License along with |
| - * this program. If not, see <http://www.gnu.org/licenses/>. |
| - */ |
| -/* This header declares the symbols defined in tilcdc_slave_compat.dts */ |
| - |
| -#ifndef __TILCDC_SLAVE_COMPAT_H__ |
| -#define __TILCDC_SLAVE_COMPAT_H__ |
| - |
| -extern uint8_t __dtb_tilcdc_slave_compat_begin[]; |
| -extern uint8_t __dtb_tilcdc_slave_compat_end[]; |
| - |
| -#endif /* __TILCDC_SLAVE_COMPAT_H__ */ |
| -- |
| 2.19.0 |
| |