max98390.c (cdd38c5f1ce4398ec58fec95904b75824daab7b5) max98390.c (e5870bd0e40c749fd96a4e565497c789bee456bf)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * max98390.c -- MAX98390 ALSA Soc Audio driver
4 *
5 * Copyright (C) 2020 Maxim Integrated Products
6 *
7 */
8

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

851
852 regmap_write(max98390->regmap, MAX98390_CLK_MON, 0x6f);
853 regmap_write(max98390->regmap, MAX98390_DAT_MON, 0x00);
854 regmap_write(max98390->regmap, MAX98390_PWR_GATE_CTL, 0x00);
855 regmap_write(max98390->regmap, MAX98390_PCM_RX_EN_A, 0x03);
856 regmap_write(max98390->regmap, MAX98390_ENV_TRACK_VOUT_HEADROOM, 0x0e);
857 regmap_write(max98390->regmap, MAX98390_BOOST_BYPASS1, 0x46);
858 regmap_write(max98390->regmap, MAX98390_FET_SCALING3, 0x03);
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * max98390.c -- MAX98390 ALSA Soc Audio driver
4 *
5 * Copyright (C) 2020 Maxim Integrated Products
6 *
7 */
8

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

851
852 regmap_write(max98390->regmap, MAX98390_CLK_MON, 0x6f);
853 regmap_write(max98390->regmap, MAX98390_DAT_MON, 0x00);
854 regmap_write(max98390->regmap, MAX98390_PWR_GATE_CTL, 0x00);
855 regmap_write(max98390->regmap, MAX98390_PCM_RX_EN_A, 0x03);
856 regmap_write(max98390->regmap, MAX98390_ENV_TRACK_VOUT_HEADROOM, 0x0e);
857 regmap_write(max98390->regmap, MAX98390_BOOST_BYPASS1, 0x46);
858 regmap_write(max98390->regmap, MAX98390_FET_SCALING3, 0x03);
859
860 /* voltage, current slot configuration */
861 regmap_write(max98390->regmap,
862 MAX98390_PCM_CH_SRC_2,
863 (max98390->i_l_slot << 4 |
864 max98390->v_l_slot)&0xFF);
865
866 if (max98390->v_l_slot < 8) {
867 regmap_update_bits(max98390->regmap,
868 MAX98390_PCM_TX_HIZ_CTRL_A,
869 1 << max98390->v_l_slot, 0);
870 regmap_update_bits(max98390->regmap,
871 MAX98390_PCM_TX_EN_A,
872 1 << max98390->v_l_slot,
873 1 << max98390->v_l_slot);
874 } else {
875 regmap_update_bits(max98390->regmap,
876 MAX98390_PCM_TX_HIZ_CTRL_B,
877 1 << (max98390->v_l_slot - 8), 0);
878 regmap_update_bits(max98390->regmap,
879 MAX98390_PCM_TX_EN_B,
880 1 << (max98390->v_l_slot - 8),
881 1 << (max98390->v_l_slot - 8));
882 }
883
884 if (max98390->i_l_slot < 8) {
885 regmap_update_bits(max98390->regmap,
886 MAX98390_PCM_TX_HIZ_CTRL_A,
887 1 << max98390->i_l_slot, 0);
888 regmap_update_bits(max98390->regmap,
889 MAX98390_PCM_TX_EN_A,
890 1 << max98390->i_l_slot,
891 1 << max98390->i_l_slot);
892 } else {
893 regmap_update_bits(max98390->regmap,
894 MAX98390_PCM_TX_HIZ_CTRL_B,
895 1 << (max98390->i_l_slot - 8), 0);
896 regmap_update_bits(max98390->regmap,
897 MAX98390_PCM_TX_EN_B,
898 1 << (max98390->i_l_slot - 8),
899 1 << (max98390->i_l_slot - 8));
900 }
859}
860
861static int max98390_probe(struct snd_soc_component *component)
862{
863 struct max98390_priv *max98390 =
864 snd_soc_component_get_drvdata(component);
865
866 regmap_write(max98390->regmap, MAX98390_SOFTWARE_RESET, 0x01);

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

941 .max_register = MAX98390_R24FF_REV_ID,
942 .reg_defaults = max98390_reg_defaults,
943 .num_reg_defaults = ARRAY_SIZE(max98390_reg_defaults),
944 .readable_reg = max98390_readable_register,
945 .volatile_reg = max98390_volatile_reg,
946 .cache_type = REGCACHE_RBTREE,
947};
948
901}
902
903static int max98390_probe(struct snd_soc_component *component)
904{
905 struct max98390_priv *max98390 =
906 snd_soc_component_get_drvdata(component);
907
908 regmap_write(max98390->regmap, MAX98390_SOFTWARE_RESET, 0x01);

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

983 .max_register = MAX98390_R24FF_REV_ID,
984 .reg_defaults = max98390_reg_defaults,
985 .num_reg_defaults = ARRAY_SIZE(max98390_reg_defaults),
986 .readable_reg = max98390_readable_register,
987 .volatile_reg = max98390_volatile_reg,
988 .cache_type = REGCACHE_RBTREE,
989};
990
991static void max98390_slot_config(struct i2c_client *i2c,
992 struct max98390_priv *max98390)
993{
994 int value;
995 struct device *dev = &i2c->dev;
996
997 if (!device_property_read_u32(dev, "maxim,vmon-slot-no", &value))
998 max98390->v_l_slot = value & 0xF;
999 else
1000 max98390->v_l_slot = 0;
1001
1002 if (!device_property_read_u32(dev, "maxim,imon-slot-no", &value))
1003 max98390->i_l_slot = value & 0xF;
1004 else
1005 max98390->i_l_slot = 1;
1006}
1007
949static int max98390_i2c_probe(struct i2c_client *i2c,
950 const struct i2c_device_id *id)
951{
952 int ret = 0;
953 int reg = 0;
954
955 struct max98390_priv *max98390 = NULL;
956 struct i2c_adapter *adapter = to_i2c_adapter(i2c->dev.parent);

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

983 "no optional property 'r0_calib' found, default:\n");
984 }
985
986 dev_info(&i2c->dev,
987 "%s: r0_calib: 0x%x,temperature_calib: 0x%x",
988 __func__, max98390->ref_rdc_value,
989 max98390->ambient_temp_value);
990
1008static int max98390_i2c_probe(struct i2c_client *i2c,
1009 const struct i2c_device_id *id)
1010{
1011 int ret = 0;
1012 int reg = 0;
1013
1014 struct max98390_priv *max98390 = NULL;
1015 struct i2c_adapter *adapter = to_i2c_adapter(i2c->dev.parent);

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

1042 "no optional property 'r0_calib' found, default:\n");
1043 }
1044
1045 dev_info(&i2c->dev,
1046 "%s: r0_calib: 0x%x,temperature_calib: 0x%x",
1047 __func__, max98390->ref_rdc_value,
1048 max98390->ambient_temp_value);
1049
1050 /* voltage/current slot configuration */
1051 max98390_slot_config(i2c, max98390);
1052
991 /* regmap initialization */
992 max98390->regmap = devm_regmap_init_i2c(i2c, &max98390_regmap);
993 if (IS_ERR(max98390->regmap)) {
994 ret = PTR_ERR(max98390->regmap);
995 dev_err(&i2c->dev,
996 "Failed to allocate regmap: %d\n", ret);
997 return ret;
998 }

--- 58 unchanged lines hidden ---
1053 /* regmap initialization */
1054 max98390->regmap = devm_regmap_init_i2c(i2c, &max98390_regmap);
1055 if (IS_ERR(max98390->regmap)) {
1056 ret = PTR_ERR(max98390->regmap);
1057 dev_err(&i2c->dev,
1058 "Failed to allocate regmap: %d\n", ret);
1059 return ret;
1060 }

--- 58 unchanged lines hidden ---