diff options
-rw-r--r-- | sound/soc/sh/fsi.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c index 28aae0d01545..1693be477f7a 100644 --- a/sound/soc/sh/fsi.c +++ b/sound/soc/sh/fsi.c | |||
@@ -111,7 +111,9 @@ struct fsi_priv { | |||
111 | int periods; | 111 | int periods; |
112 | }; | 112 | }; |
113 | 113 | ||
114 | struct fsi_regs { | 114 | struct fsi_core { |
115 | int ver; | ||
116 | |||
115 | u32 int_st; | 117 | u32 int_st; |
116 | u32 iemsk; | 118 | u32 iemsk; |
117 | u32 imsk; | 119 | u32 imsk; |
@@ -122,7 +124,7 @@ struct fsi_master { | |||
122 | int irq; | 124 | int irq; |
123 | struct fsi_priv fsia; | 125 | struct fsi_priv fsia; |
124 | struct fsi_priv fsib; | 126 | struct fsi_priv fsib; |
125 | struct fsi_regs *regs; | 127 | struct fsi_core *core; |
126 | struct sh_fsi_platform_info *info; | 128 | struct sh_fsi_platform_info *info; |
127 | spinlock_t lock; | 129 | spinlock_t lock; |
128 | }; | 130 | }; |
@@ -339,8 +341,8 @@ static void fsi_irq_enable(struct fsi_priv *fsi, int is_play) | |||
339 | u32 data = fsi_port_ab_io_bit(fsi, is_play); | 341 | u32 data = fsi_port_ab_io_bit(fsi, is_play); |
340 | struct fsi_master *master = fsi_get_master(fsi); | 342 | struct fsi_master *master = fsi_get_master(fsi); |
341 | 343 | ||
342 | fsi_master_mask_set(master, master->regs->imsk, data, data); | 344 | fsi_master_mask_set(master, master->core->imsk, data, data); |
343 | fsi_master_mask_set(master, master->regs->iemsk, data, data); | 345 | fsi_master_mask_set(master, master->core->iemsk, data, data); |
344 | } | 346 | } |
345 | 347 | ||
346 | static void fsi_irq_disable(struct fsi_priv *fsi, int is_play) | 348 | static void fsi_irq_disable(struct fsi_priv *fsi, int is_play) |
@@ -348,18 +350,18 @@ static void fsi_irq_disable(struct fsi_priv *fsi, int is_play) | |||
348 | u32 data = fsi_port_ab_io_bit(fsi, is_play); | 350 | u32 data = fsi_port_ab_io_bit(fsi, is_play); |
349 | struct fsi_master *master = fsi_get_master(fsi); | 351 | struct fsi_master *master = fsi_get_master(fsi); |
350 | 352 | ||
351 | fsi_master_mask_set(master, master->regs->imsk, data, 0); | 353 | fsi_master_mask_set(master, master->core->imsk, data, 0); |
352 | fsi_master_mask_set(master, master->regs->iemsk, data, 0); | 354 | fsi_master_mask_set(master, master->core->iemsk, data, 0); |
353 | } | 355 | } |
354 | 356 | ||
355 | static u32 fsi_irq_get_status(struct fsi_master *master) | 357 | static u32 fsi_irq_get_status(struct fsi_master *master) |
356 | { | 358 | { |
357 | return fsi_master_read(master, master->regs->int_st); | 359 | return fsi_master_read(master, master->core->int_st); |
358 | } | 360 | } |
359 | 361 | ||
360 | static void fsi_irq_clear_all_status(struct fsi_master *master) | 362 | static void fsi_irq_clear_all_status(struct fsi_master *master) |
361 | { | 363 | { |
362 | fsi_master_write(master, master->regs->int_st, 0x0000000); | 364 | fsi_master_write(master, master->core->int_st, 0); |
363 | } | 365 | } |
364 | 366 | ||
365 | static void fsi_irq_clear_status(struct fsi_priv *fsi) | 367 | static void fsi_irq_clear_status(struct fsi_priv *fsi) |
@@ -371,7 +373,7 @@ static void fsi_irq_clear_status(struct fsi_priv *fsi) | |||
371 | data |= fsi_port_ab_io_bit(fsi, 1); | 373 | data |= fsi_port_ab_io_bit(fsi, 1); |
372 | 374 | ||
373 | /* clear interrupt factor */ | 375 | /* clear interrupt factor */ |
374 | fsi_master_mask_set(master, master->regs->int_st, data, 0); | 376 | fsi_master_mask_set(master, master->core->int_st, data, 0); |
375 | } | 377 | } |
376 | 378 | ||
377 | /************************************************************************ | 379 | /************************************************************************ |
@@ -987,7 +989,7 @@ static int fsi_probe(struct platform_device *pdev) | |||
987 | master->fsia.master = master; | 989 | master->fsia.master = master; |
988 | master->fsib.base = master->base + 0x40; | 990 | master->fsib.base = master->base + 0x40; |
989 | master->fsib.master = master; | 991 | master->fsib.master = master; |
990 | master->regs = (struct fsi_regs *)id_entry->driver_data; | 992 | master->core = (struct fsi_core *)id_entry->driver_data; |
991 | spin_lock_init(&master->lock); | 993 | spin_lock_init(&master->lock); |
992 | 994 | ||
993 | pm_runtime_enable(&pdev->dev); | 995 | pm_runtime_enable(&pdev->dev); |
@@ -1068,21 +1070,27 @@ static struct dev_pm_ops fsi_pm_ops = { | |||
1068 | .runtime_resume = fsi_runtime_nop, | 1070 | .runtime_resume = fsi_runtime_nop, |
1069 | }; | 1071 | }; |
1070 | 1072 | ||
1071 | static struct fsi_regs fsi_regs = { | 1073 | static struct fsi_core fsi1_core = { |
1074 | .ver = 1, | ||
1075 | |||
1076 | /* Interrupt */ | ||
1072 | .int_st = INT_ST, | 1077 | .int_st = INT_ST, |
1073 | .iemsk = IEMSK, | 1078 | .iemsk = IEMSK, |
1074 | .imsk = IMSK, | 1079 | .imsk = IMSK, |
1075 | }; | 1080 | }; |
1076 | 1081 | ||
1077 | static struct fsi_regs fsi2_regs = { | 1082 | static struct fsi_core fsi2_core = { |
1083 | .ver = 2, | ||
1084 | |||
1085 | /* Interrupt */ | ||
1078 | .int_st = CPU_INT_ST, | 1086 | .int_st = CPU_INT_ST, |
1079 | .iemsk = CPU_IEMSK, | 1087 | .iemsk = CPU_IEMSK, |
1080 | .imsk = CPU_IMSK, | 1088 | .imsk = CPU_IMSK, |
1081 | }; | 1089 | }; |
1082 | 1090 | ||
1083 | static struct platform_device_id fsi_id_table[] = { | 1091 | static struct platform_device_id fsi_id_table[] = { |
1084 | { "sh_fsi", (kernel_ulong_t)&fsi_regs }, | 1092 | { "sh_fsi", (kernel_ulong_t)&fsi1_core }, |
1085 | { "sh_fsi2", (kernel_ulong_t)&fsi2_regs }, | 1093 | { "sh_fsi2", (kernel_ulong_t)&fsi2_core }, |
1086 | }; | 1094 | }; |
1087 | 1095 | ||
1088 | static struct platform_driver fsi_driver = { | 1096 | static struct platform_driver fsi_driver = { |