tc358767.c (c1de02bbeca58894c805b3d45c2da4bf30cfc5d9) tc358767.c (0b4c48f3e315d172e4cc06e10f2c8ba180788baf)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * TC358767/TC358867/TC9595 DSI/DPI-to-DPI/(e)DP bridge driver
4 *
5 * The TC358767/TC358867/TC9595 can operate in multiple modes.
6 * All modes are supported -- DPI->(e)DP / DSI->DPI / DSI->(e)DP .
7 *
8 * Copyright (C) 2016 CogentEmbedded Inc

--- 2019 unchanged lines hidden (view full) ---

2028 return tc_probe_edp_bridge_endpoint(tc);
2029 }
2030
2031 dev_warn(dev, "Invalid mode (0x%x) is not supported!\n", mode);
2032
2033 return -EINVAL;
2034}
2035
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * TC358767/TC358867/TC9595 DSI/DPI-to-DPI/(e)DP bridge driver
4 *
5 * The TC358767/TC358867/TC9595 can operate in multiple modes.
6 * All modes are supported -- DPI->(e)DP / DSI->DPI / DSI->(e)DP .
7 *
8 * Copyright (C) 2016 CogentEmbedded Inc

--- 2019 unchanged lines hidden (view full) ---

2028 return tc_probe_edp_bridge_endpoint(tc);
2029 }
2030
2031 dev_warn(dev, "Invalid mode (0x%x) is not supported!\n", mode);
2032
2033 return -EINVAL;
2034}
2035
2036static void tc_clk_disable(void *data)
2037{
2038 struct clk *refclk = data;
2039
2040 clk_disable_unprepare(refclk);
2041}
2042
2036static int tc_probe(struct i2c_client *client, const struct i2c_device_id *id)
2037{
2038 struct device *dev = &client->dev;
2039 struct tc_data *tc;
2040 int ret;
2041
2042 tc = devm_kzalloc(dev, sizeof(*tc), GFP_KERNEL);
2043 if (!tc)
2044 return -ENOMEM;
2045
2046 tc->dev = dev;
2047
2048 ret = tc_probe_bridge_endpoint(tc);
2049 if (ret)
2050 return ret;
2051
2043static int tc_probe(struct i2c_client *client, const struct i2c_device_id *id)
2044{
2045 struct device *dev = &client->dev;
2046 struct tc_data *tc;
2047 int ret;
2048
2049 tc = devm_kzalloc(dev, sizeof(*tc), GFP_KERNEL);
2050 if (!tc)
2051 return -ENOMEM;
2052
2053 tc->dev = dev;
2054
2055 ret = tc_probe_bridge_endpoint(tc);
2056 if (ret)
2057 return ret;
2058
2059 tc->refclk = devm_clk_get(dev, "ref");
2060 if (IS_ERR(tc->refclk)) {
2061 ret = PTR_ERR(tc->refclk);
2062 dev_err(dev, "Failed to get refclk: %d\n", ret);
2063 return ret;
2064 }
2065
2066 ret = clk_prepare_enable(tc->refclk);
2067 if (ret)
2068 return ret;
2069
2070 ret = devm_add_action_or_reset(dev, tc_clk_disable, tc->refclk);
2071 if (ret)
2072 return ret;
2073
2074 /* tRSTW = 100 cycles , at 13 MHz that is ~7.69 us */
2075 usleep_range(10, 15);
2076
2052 /* Shut down GPIO is optional */
2053 tc->sd_gpio = devm_gpiod_get_optional(dev, "shutdown", GPIOD_OUT_HIGH);
2054 if (IS_ERR(tc->sd_gpio))
2055 return PTR_ERR(tc->sd_gpio);
2056
2057 if (tc->sd_gpio) {
2058 gpiod_set_value_cansleep(tc->sd_gpio, 0);
2059 usleep_range(5000, 10000);

--- 4 unchanged lines hidden (view full) ---

2064 if (IS_ERR(tc->reset_gpio))
2065 return PTR_ERR(tc->reset_gpio);
2066
2067 if (tc->reset_gpio) {
2068 gpiod_set_value_cansleep(tc->reset_gpio, 1);
2069 usleep_range(5000, 10000);
2070 }
2071
2077 /* Shut down GPIO is optional */
2078 tc->sd_gpio = devm_gpiod_get_optional(dev, "shutdown", GPIOD_OUT_HIGH);
2079 if (IS_ERR(tc->sd_gpio))
2080 return PTR_ERR(tc->sd_gpio);
2081
2082 if (tc->sd_gpio) {
2083 gpiod_set_value_cansleep(tc->sd_gpio, 0);
2084 usleep_range(5000, 10000);

--- 4 unchanged lines hidden (view full) ---

2089 if (IS_ERR(tc->reset_gpio))
2090 return PTR_ERR(tc->reset_gpio);
2091
2092 if (tc->reset_gpio) {
2093 gpiod_set_value_cansleep(tc->reset_gpio, 1);
2094 usleep_range(5000, 10000);
2095 }
2096
2072 tc->refclk = devm_clk_get(dev, "ref");
2073 if (IS_ERR(tc->refclk)) {
2074 ret = PTR_ERR(tc->refclk);
2075 dev_err(dev, "Failed to get refclk: %d\n", ret);
2076 return ret;
2077 }
2078
2079 tc->regmap = devm_regmap_init_i2c(client, &tc_regmap_config);
2080 if (IS_ERR(tc->regmap)) {
2081 ret = PTR_ERR(tc->regmap);
2082 dev_err(dev, "Failed to initialize regmap: %d\n", ret);
2083 return ret;
2084 }
2085
2086 ret = of_property_read_u32(dev->of_node, "toshiba,hpd-pin",

--- 128 unchanged lines hidden ---
2097 tc->regmap = devm_regmap_init_i2c(client, &tc_regmap_config);
2098 if (IS_ERR(tc->regmap)) {
2099 ret = PTR_ERR(tc->regmap);
2100 dev_err(dev, "Failed to initialize regmap: %d\n", ret);
2101 return ret;
2102 }
2103
2104 ret = of_property_read_u32(dev->of_node, "toshiba,hpd-pin",

--- 128 unchanged lines hidden ---