diff options
-rw-r--r-- | sound/soc/sh/rcar/ssi.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c index 7db05fdfb656..7ee89da4dd5f 100644 --- a/sound/soc/sh/rcar/ssi.c +++ b/sound/soc/sh/rcar/ssi.c | |||
@@ -403,29 +403,30 @@ static int rsnd_ssi_quit(struct rsnd_mod *mod, | |||
403 | struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); | 403 | struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); |
404 | struct device *dev = rsnd_priv_to_dev(priv); | 404 | struct device *dev = rsnd_priv_to_dev(priv); |
405 | 405 | ||
406 | if (rsnd_ssi_is_parent(mod, io)) | 406 | if (!ssi->usrcnt) { |
407 | goto rsnd_ssi_quit_end; | 407 | dev_err(dev, "%s[%d] usrcnt error\n", |
408 | rsnd_mod_name(mod), rsnd_mod_id(mod)); | ||
409 | return -EIO; | ||
410 | } | ||
408 | 411 | ||
409 | if (ssi->err > 0) | 412 | if (!rsnd_ssi_is_parent(mod, io)) { |
410 | dev_warn(dev, "%s[%d] under/over flow err = %d\n", | 413 | if (ssi->err > 0) |
411 | rsnd_mod_name(mod), rsnd_mod_id(mod), ssi->err); | 414 | dev_warn(dev, "%s[%d] under/over flow err = %d\n", |
415 | rsnd_mod_name(mod), rsnd_mod_id(mod), | ||
416 | ssi->err); | ||
412 | 417 | ||
413 | ssi->cr_own = 0; | 418 | ssi->cr_own = 0; |
414 | ssi->err = 0; | 419 | ssi->err = 0; |
415 | 420 | ||
416 | rsnd_ssi_irq_disable(mod); | 421 | rsnd_ssi_irq_disable(mod); |
422 | } | ||
417 | 423 | ||
418 | rsnd_ssi_quit_end: | ||
419 | rsnd_ssi_master_clk_stop(ssi, io); | 424 | rsnd_ssi_master_clk_stop(ssi, io); |
420 | 425 | ||
421 | rsnd_mod_power_off(mod); | 426 | rsnd_mod_power_off(mod); |
422 | 427 | ||
423 | ssi->usrcnt--; | 428 | ssi->usrcnt--; |
424 | 429 | ||
425 | if (ssi->usrcnt < 0) | ||
426 | dev_err(dev, "%s[%d] usrcnt error\n", | ||
427 | rsnd_mod_name(mod), rsnd_mod_id(mod)); | ||
428 | |||
429 | return 0; | 430 | return 0; |
430 | } | 431 | } |
431 | 432 | ||