struct loongson_i2s *i2s = dev_get_drvdata(dev);
regcache_cache_only(i2s->regmap, true);
+ regcache_mark_dirty(i2s->regmap);
return 0;
}
struct loongson_i2s *i2s = dev_get_drvdata(dev);
regcache_cache_only(i2s->regmap, false);
- regcache_mark_dirty(i2s->regmap);
+
return regcache_sync(i2s->regmap);
}
};
EXPORT_SYMBOL_GPL(loongson_i2s_pm);
+static bool loongson_i2s_rd_reg(struct device *dev, unsigned int reg)
+{
+ switch (reg) {
+ case LS_I2S_VER:
+ case LS_I2S_CFG:
+ case LS_I2S_CTRL:
+ case LS_I2S_RX_DATA:
+ case LS_I2S_TX_DATA:
+ case LS_I2S_CFG1:
+ return true;
+ default:
+ return false;
+ };
+}
+
+static bool loongson_i2s_wr_reg(struct device *dev, unsigned int reg)
+{
+ switch (reg) {
+ case LS_I2S_CFG:
+ case LS_I2S_CTRL:
+ case LS_I2S_RX_DATA:
+ case LS_I2S_TX_DATA:
+ case LS_I2S_CFG1:
+ return true;
+ default:
+ return false;
+ };
+}
+
+static bool loongson_i2s_volatile_reg(struct device *dev, unsigned int reg)
+{
+ switch (reg) {
+ case LS_I2S_CTRL:
+ case LS_I2S_RX_DATA:
+ case LS_I2S_TX_DATA:
+ return true;
+ default:
+ return false;
+ };
+}
+
+const struct regmap_config loongson_i2s_regmap_config = {
+ .reg_bits = 32,
+ .reg_stride = 4,
+ .val_bits = 32,
+ .max_register = LS_I2S_CFG1,
+ .readable_reg = loongson_i2s_rd_reg,
+ .writeable_reg = loongson_i2s_wr_reg,
+ .volatile_reg = loongson_i2s_volatile_reg,
+ .cache_type = REGCACHE_MAPLE,
+};
+EXPORT_SYMBOL_GPL(loongson_i2s_regmap_config);
+
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Common functions for loongson I2S controller driver");
#define DRIVER_NAME "loongson-i2s-pci"
-static bool loongson_i2s_wr_reg(struct device *dev, unsigned int reg)
-{
- switch (reg) {
- case LS_I2S_CFG:
- case LS_I2S_CTRL:
- case LS_I2S_RX_DATA:
- case LS_I2S_TX_DATA:
- case LS_I2S_CFG1:
- return true;
- default:
- return false;
- };
-}
-
-static bool loongson_i2s_rd_reg(struct device *dev, unsigned int reg)
-{
- switch (reg) {
- case LS_I2S_VER:
- case LS_I2S_CFG:
- case LS_I2S_CTRL:
- case LS_I2S_RX_DATA:
- case LS_I2S_TX_DATA:
- case LS_I2S_CFG1:
- return true;
- default:
- return false;
- };
-}
-
-static bool loongson_i2s_volatile_reg(struct device *dev, unsigned int reg)
-{
- switch (reg) {
- case LS_I2S_CFG:
- case LS_I2S_CTRL:
- case LS_I2S_RX_DATA:
- case LS_I2S_TX_DATA:
- case LS_I2S_CFG1:
- return true;
- default:
- return false;
- };
-}
-
-static const struct regmap_config loongson_i2s_regmap_config = {
- .reg_bits = 32,
- .reg_stride = 4,
- .val_bits = 32,
- .max_register = LS_I2S_CFG1,
- .writeable_reg = loongson_i2s_wr_reg,
- .readable_reg = loongson_i2s_rd_reg,
- .volatile_reg = loongson_i2s_volatile_reg,
- .cache_type = REGCACHE_FLAT,
-};
-
static int loongson_i2s_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *pid)
{
.open = loongson_pcm_open,
};
-static const struct regmap_config loongson_i2s_regmap_config = {
- .reg_bits = 32,
- .reg_stride = 4,
- .val_bits = 32,
- .max_register = 0x14,
- .cache_type = REGCACHE_FLAT,
-};
-
static int loongson_i2s_apbdma_config(struct platform_device *pdev)
{
int val;