Lines Matching +full:codec +full:- +full:clkout
1 // SPDX-License-Identifier: GPL-2.0-only
5 * Copyright (c) 2014-2018, Fuzhou Rockchip Electronics Co., Ltd
7 * Author: Chris Zhong <zyw@rock-chips.com>
8 * Author: Zhang Qing <zhangqing@rock-chips.com>
37 * - Technically the ROUND_30s bit makes RTC_CTRL_REG volatile, but in rk808_is_volatile_reg()
39 * - It's unlikely we care that RK808_DEVCTRL_REG is volatile since in rk808_is_volatile_reg()
65 * - Technically the ROUND_30s bit makes RTC_CTRL_REG volatile, but in rk817_is_volatile_reg()
90 * - Technically the ROUND_30s bit makes RTC_CTRL_REG volatile, but in rk818_is_volatile_reg()
92 * - It's unlikely we care that RK808_DEVCTRL_REG is volatile since in rk818_is_volatile_reg()
190 { .name = "rk808-clkout", },
191 { .name = "rk808-regulator", },
192 { .name = "rk805-pinctrl", },
194 .name = "rk808-rtc",
198 { .name = "rk805-pwrkey",
205 { .name = "rk808-clkout", },
206 { .name = "rk808-regulator", },
208 .name = "rk808-rtc",
215 { .name = "rk808-clkout", },
216 { .name = "rk808-regulator", },
217 { .name = "rk805-pinctrl", },
218 { .name = "rk816-battery", .of_compatible = "rk816-battery", },
220 .name = "rk805-pwrkey",
225 .name = "rk808-rtc",
232 { .name = "rk808-clkout",},
233 { .name = "rk808-regulator",},
234 { .name = "rk817-battery", .of_compatible = "rk817,battery", },
235 { .name = "rk817-charger", .of_compatible = "rk817,charger", },
237 .name = "rk805-pwrkey",
242 .name = "rk808-rtc",
247 .name = "rk817-codec",
248 .of_compatible = "rockchip,rk817-codec",
253 { .name = "rk808-clkout", },
254 { .name = "rk808-regulator", },
255 { .name = "rk818-battery", .of_compatible = "rk818-battery", },
256 { .name = "rk818-charger", },
258 .name = "rk808-rtc",
698 ret = regmap_update_bits(rk808->regmap, in rk805_device_shutdown_prepare()
702 dev_err(&rk808_i2c_client->dev, "Failed to shutdown device!\n"); in rk805_device_shutdown_prepare()
711 regmap_update_bits(rk808->regmap, in rk817_shutdown_prepare()
714 regmap_update_bits(rk808->regmap, in rk817_shutdown_prepare()
718 if (rk808->pins && rk808->pins->p && rk808->pins->power_off) { in rk817_shutdown_prepare()
719 ret = regmap_update_bits(rk808->regmap, in rk817_shutdown_prepare()
726 ret = regmap_update_bits(rk808->regmap, in rk817_shutdown_prepare()
733 ret = pinctrl_select_state(rk808->pins->p, in rk817_shutdown_prepare()
734 rk808->pins->power_off); in rk817_shutdown_prepare()
741 ret = regmap_update_bits(rk808->regmap, in rk817_shutdown_prepare()
745 dev_err(&rk808_i2c_client->dev, "Failed to shutdown device!\n"); in rk817_shutdown_prepare()
756 switch (rk808->variant) { in rk8xx_device_shutdown()
777 ret = regmap_update_bits(rk808->regmap, reg, bit, bit); in rk8xx_device_shutdown()
779 dev_err(&rk808_i2c_client->dev, "Failed to shutdown device!\n"); in rk8xx_device_shutdown()
791 dev_warn(&rk808_i2c_client->dev, in rk8xx_syscore_shutdown()
797 regmap_update_bits(rk808->regmap, in rk8xx_syscore_shutdown()
800 regmap_update_bits(rk808->regmap, in rk8xx_syscore_shutdown()
812 if (rk808->variant == RK809_ID || rk808->variant == RK817_ID) { in rk8xx_syscore_shutdown()
813 ret = regmap_update_bits(rk808->regmap, in rk8xx_syscore_shutdown()
818 dev_warn(&rk808_i2c_client->dev, in rk8xx_syscore_shutdown()
824 dev_info(&rk808_i2c_client->dev, "System power off\n"); in rk8xx_syscore_shutdown()
827 dev_info(&rk808_i2c_client->dev, in rk8xx_syscore_shutdown()
879 regmap_write(rk808->regmap, addr, data); in rk8xx_dbg_store()
880 regmap_read(rk808->regmap, addr, &data); in rk8xx_dbg_store()
891 regmap_read(rk808->regmap, addr, &data); in rk8xx_dbg_store()
909 pinctrl_dev = platform_device_alloc("rk805-pinctrl", -1); in rk817_pinctrl_init()
912 return -ENOMEM; in rk817_pinctrl_init()
915 pinctrl_dev->dev.parent = dev; in rk817_pinctrl_init()
921 dev_err(dev, "Add rk805-pinctrl dev failed!\n"); in rk817_pinctrl_init()
924 if (dev->pins && !IS_ERR(dev->pins->p)) { in rk817_pinctrl_init()
929 rk808->pins = devm_kzalloc(dev, sizeof(struct rk808_pin_info), in rk817_pinctrl_init()
931 if (!rk808->pins) in rk817_pinctrl_init()
932 return -ENOMEM; in rk817_pinctrl_init()
934 rk808->pins->p = devm_pinctrl_get(dev); in rk817_pinctrl_init()
935 if (IS_ERR(rk808->pins->p)) { in rk817_pinctrl_init()
936 rk808->pins->p = NULL; in rk817_pinctrl_init()
941 default_st = pinctrl_lookup_state(rk808->pins->p, in rk817_pinctrl_init()
946 return -EINVAL; in rk817_pinctrl_init()
949 ret = pinctrl_select_state(rk808->pins->p, default_st); in rk817_pinctrl_init()
952 return -EINVAL; in rk817_pinctrl_init()
955 rk808->pins->power_off = pinctrl_lookup_state(rk808->pins->p, in rk817_pinctrl_init()
956 "pmic-power-off"); in rk817_pinctrl_init()
957 if (IS_ERR(rk808->pins->power_off)) { in rk817_pinctrl_init()
958 rk808->pins->power_off = NULL; in rk817_pinctrl_init()
959 dev_dbg(dev, "no power-off pinctrl state\n"); in rk817_pinctrl_init()
962 rk808->pins->sleep = pinctrl_lookup_state(rk808->pins->p, in rk817_pinctrl_init()
963 "pmic-sleep"); in rk817_pinctrl_init()
964 if (IS_ERR(rk808->pins->sleep)) { in rk817_pinctrl_init()
965 rk808->pins->sleep = NULL; in rk817_pinctrl_init()
966 dev_dbg(dev, "no sleep-setting state\n"); in rk817_pinctrl_init()
969 rk808->pins->reset = pinctrl_lookup_state(rk808->pins->p, in rk817_pinctrl_init()
970 "pmic-reset"); in rk817_pinctrl_init()
971 if (IS_ERR(rk808->pins->reset)) { in rk817_pinctrl_init()
972 rk808->pins->reset = NULL; in rk817_pinctrl_init()
973 dev_dbg(dev, "no reset-setting pinctrl state\n"); in rk817_pinctrl_init()
977 ret = pinctrl_select_state(rk808->pins->p, rk808->pins->reset); in rk817_pinctrl_init()
980 dev_dbg(dev, "failed to activate reset-setting pinctrl state\n"); in rk817_pinctrl_init()
1005 dev = &data->rk808->i2c->dev; in rk817_reboot_notifier_handler()
1007 regmap_read(data->rk808->regmap, RK817_POWER_EN_SAVE0, in rk817_reboot_notifier_handler()
1010 regmap_read(data->rk808->regmap, RK817_POWER_EN_SAVE1, in rk817_reboot_notifier_handler()
1013 regmap_write(data->rk808->regmap, in rk817_reboot_notifier_handler()
1017 regmap_write(data->rk808->regmap, in rk817_reboot_notifier_handler()
1021 regmap_write(data->rk808->regmap, in rk817_reboot_notifier_handler()
1025 regmap_write(data->rk808->regmap, in rk817_reboot_notifier_handler()
1042 * In the case of 0b'00, PMIC reset itself which triggers SoC NPOR-reset in rk817_reboot_notifier_handler()
1050 ret = regmap_update_bits(data->rk808->regmap, in rk817_reboot_notifier_handler()
1069 struct device_node *np = dev->of_node; in rk817_of_property_prepare()
1071 ret = of_property_read_u32_index(np, "fb-inner-reg-idxs", 0, &inner); in rk817_of_property_prepare()
1073 regmap_update_bits(rk808->regmap, RK817_POWER_CONFIG, in rk817_of_property_prepare()
1077 regmap_update_bits(rk808->regmap, RK817_POWER_CONFIG, in rk817_of_property_prepare()
1082 ret = of_property_read_u32(np, "pmic-reset-func", &func); in rk817_of_property_prepare()
1094 regmap_update_bits(rk808->regmap, RK817_SYS_CFG(3), msk, val); in rk817_of_property_prepare()
1124 struct device_node *np = client->dev.of_node; in rk808_probe()
1142 rk808 = devm_kzalloc(&client->dev, sizeof(*rk808), GFP_KERNEL); in rk808_probe()
1144 return -ENOMEM; in rk808_probe()
1158 dev_err(&client->dev, "failed to read the chip id at 0x%x\n", in rk808_probe()
1165 dev_err(&client->dev, "failed to read the chip id at 0x%x\n", in rk808_probe()
1170 rk808->variant = ((msb << 8) | lsb) & RK8XX_ID_MSK; in rk808_probe()
1171 dev_info(&client->dev, "chip id: 0x%x\n", (unsigned int)rk808->variant); in rk808_probe()
1173 switch (rk808->variant) { in rk808_probe()
1175 rk808->regmap_cfg = &rk805_regmap_config; in rk808_probe()
1176 rk808->regmap_irq_chip = &rk805_irq_chip; in rk808_probe()
1188 rk808->pm_pwroff_prep_fn = rk805_device_shutdown_prepare; in rk808_probe()
1191 rk808->regmap_cfg = &rk808_regmap_config; in rk808_probe()
1192 rk808->regmap_irq_chip = &rk808_irq_chip; in rk808_probe()
1200 rk808->regmap_cfg = &rk816_regmap_config; in rk808_probe()
1201 rk808->regmap_irq_chip = &rk816_irq_chip; in rk808_probe()
1216 rk808->regmap_cfg = &rk818_regmap_config; in rk808_probe()
1217 rk808->regmap_irq_chip = &rk818_irq_chip; in rk808_probe()
1232 rk808->regmap_cfg = &rk817_regmap_config; in rk808_probe()
1233 rk808->regmap_irq_chip = &rk817_irq_chip; in rk808_probe()
1240 rk808->pm_pwroff_prep_fn = rk817_shutdown_prepare; in rk808_probe()
1245 dev_err(&client->dev, "Unsupported RK8XX ID %lu\n", in rk808_probe()
1246 rk808->variant); in rk808_probe()
1247 return -EINVAL; in rk808_probe()
1250 rk808->i2c = client; in rk808_probe()
1254 rk808->regmap = devm_regmap_init_i2c(client, rk808->regmap_cfg); in rk808_probe()
1255 if (IS_ERR(rk808->regmap)) { in rk808_probe()
1256 dev_err(&client->dev, "regmap initialization failed\n"); in rk808_probe()
1257 return PTR_ERR(rk808->regmap); in rk808_probe()
1261 ret = regmap_read(rk808->regmap, on_source, &on); in rk808_probe()
1263 dev_err(&client->dev, "read 0x%x failed\n", on_source); in rk808_probe()
1267 ret = regmap_read(rk808->regmap, off_source, &off); in rk808_probe()
1269 dev_err(&client->dev, "read 0x%x failed\n", off_source); in rk808_probe()
1273 dev_info(&client->dev, "source: on=0x%02x, off=0x%02x\n", in rk808_probe()
1277 if (!client->irq) { in rk808_probe()
1278 dev_err(&client->dev, "No interrupt support, no core IRQ\n"); in rk808_probe()
1279 return -EINVAL; in rk808_probe()
1283 of_property_prepare_fn(rk808, &client->dev); in rk808_probe()
1286 ret = regmap_update_bits(rk808->regmap, in rk808_probe()
1291 dev_err(&client->dev, in rk808_probe()
1299 ret = pinctrl_init(&client->dev, rk808); in rk808_probe()
1304 ret = regmap_add_irq_chip(rk808->regmap, client->irq, in rk808_probe()
1305 IRQF_ONESHOT | IRQF_SHARED, -1, in rk808_probe()
1306 rk808->regmap_irq_chip, &rk808->irq_data); in rk808_probe()
1308 dev_err(&client->dev, "Failed to add irq_chip %d\n", ret); in rk808_probe()
1313 ret = regmap_add_irq_chip(rk808->regmap, client->irq, in rk808_probe()
1314 IRQF_ONESHOT | IRQF_SHARED, -1, in rk808_probe()
1316 &rk808->battery_irq_data); in rk808_probe()
1318 dev_err(&client->dev, in rk808_probe()
1320 regmap_del_irq_chip(client->irq, rk808->irq_data); in rk808_probe()
1325 ret = devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE, in rk808_probe()
1327 regmap_irq_get_domain(rk808->irq_data)); in rk808_probe()
1329 dev_err(&client->dev, "failed to add MFD devices %d\n", ret); in rk808_probe()
1333 pm_off = of_property_read_bool(np, "rockchip,system-power-controller"); in rk808_probe()
1336 pm_power_off_prepare = rk808->pm_pwroff_prep_fn; in rk808_probe()
1349 dev_err(&client->dev, "create rk8xx sysfs error\n"); in rk808_probe()
1358 regmap_del_irq_chip(client->irq, rk808->irq_data); in rk808_probe()
1360 regmap_del_irq_chip(client->irq, rk808->battery_irq_data); in rk808_probe()
1368 regmap_del_irq_chip(client->irq, rk808->irq_data); in rk808_remove()
1380 if (rk808->pm_pwroff_prep_fn && in rk808_remove()
1381 pm_power_off_prepare == rk808->pm_pwroff_prep_fn) in rk808_remove()
1397 ret = regmap_update_bits(rk808->regmap, in rk8xx_suspend()
1408 switch (rk808->variant) { in rk8xx_suspend()
1410 ret = regmap_update_bits(rk808->regmap, in rk8xx_suspend()
1417 if (rk808->pins && rk808->pins->p && rk808->pins->sleep) { in rk8xx_suspend()
1418 ret = regmap_update_bits(rk808->regmap, in rk8xx_suspend()
1427 ret = regmap_update_bits(rk808->regmap, in rk8xx_suspend()
1437 regmap_read(rk808->regmap, RK817_SYS_STS, &value); in rk8xx_suspend()
1439 ret = pinctrl_select_state(rk808->pins->p, rk808->pins->sleep); in rk8xx_suspend()
1460 ret = regmap_update_bits(rk808->regmap, in rk8xx_resume()
1471 switch (rk808->variant) { in rk8xx_resume()
1474 if (rk808->pins && rk808->pins->p && rk808->pins->reset) { in rk8xx_resume()
1475 ret = regmap_update_bits(rk808->regmap, in rk8xx_resume()
1484 ret = regmap_update_bits(rk808->regmap, in rk8xx_resume()
1494 regmap_read(rk808->regmap, RK817_SYS_STS, &value); in rk8xx_resume()
1496 ret = pinctrl_select_state(rk808->pins->p, rk808->pins->reset); in rk8xx_resume()
1536 MODULE_AUTHOR("Chris Zhong <zyw@rock-chips.com>");
1537 MODULE_AUTHOR("Zhang Qing <zhangqing@rock-chips.com>");