Quoting Lina Iyer (2018-04-05 09:18:28) > diff --git a/include/soc/qcom/rpmh.h b/include/soc/qcom/rpmh.h > new file mode 100644 > index 000000000000..95334d4c1ede > --- /dev/null > +++ b/include/soc/qcom/rpmh.h > @@ -0,0 +1,34 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +/* > + * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. > + */ > + > +#ifndef __SOC_QCOM_RPMH_H__ > +#define __SOC_QCOM_RPMH_H__ > + > +#include <soc/qcom/tcs.h> > +#include <linux/platform_device.h> > + > +struct rpmh_client; > + > +#if IS_ENABLED(CONFIG_QCOM_RPMH) > +int rpmh_write(struct rpmh_client *rc, enum rpmh_state state, > + const struct tcs_cmd *cmd, u32 n); > + > +struct rpmh_client *rpmh_get_client(struct platform_device *pdev); > + > +void rpmh_release(struct rpmh_client *rc);
Please get rid of this 'client' layer and fold it into the rpmh driver. Everything that uses the rpmh_client is a child device of the rpmh device so they should be able to just pass in their device pointer as their 'handle' and have the rpmh driver take that, get the parent device pointer, and pull an rpmh_drv structure out of there. The 'common' code can go into the base rpmh driver and get used from there and then we don't have to hop between two files to see how rpmh is used by the consumers. Code complexity goes down this way.