bm_csi_hw.h 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * Copyright (C) 2021 Alibaba Group Holding Limited
  3. * Author: liuyitong <yitong.lyt@alibaba-inc.com>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License version 2 as
  7. * published by the Free Software Foundation.
  8. */
  9. #ifndef _BM_CSI_HW_H_
  10. #define _BM_CSI_HW_H_
  11. #include <linux/cdev.h>
  12. #include <linux/ioctl.h>
  13. #include "dw-dphy-rx.h"
  14. #include "dw-mipi-csi.h"
  15. #include "dw-csi-data.h"
  16. #include "dw-dphy-data.h"
  17. struct bm_csi_drvdata {
  18. struct cdev cdev;
  19. dev_t devt;
  20. struct class *class;
  21. struct mutex mutex;
  22. unsigned int device_idx;
  23. void __iomem *base;
  24. void __iomem *reset;
  25. struct dw_dphy_rx *dphy;
  26. struct dw_csi csi_dev;
  27. struct dw_csih_pdata csi_pdata;
  28. struct dw_phy_pdata dphy_pdata;
  29. int irq_num;
  30. struct clk *pclk;
  31. struct clk *pixclk;
  32. struct clk *cfg_clk0;
  33. struct clk *cfg_clk1;
  34. struct clk *cfg_clk2;
  35. struct platform_device *pdev;
  36. void *private; // can be bm_csi_drvdata_private, but not use now
  37. };
  38. struct bm_csi_drvdata_private {
  39. int private_tmp;
  40. };
  41. int bm_csi_write_reg(struct bm_csi_drvdata *drvdata, void *__user args);
  42. int bm_csi_read_reg(struct bm_csi_drvdata *drvdata, void *__user args);
  43. int bm_csi_init(struct bm_csi_drvdata *drvdata, void *__user args);
  44. int bm_csi_exit(struct bm_csi_drvdata *drvdata, void *__user args);
  45. int bm_csi_reset(struct bm_csi_drvdata *drvdata, void *__user args);
  46. int bm_csi_set_power(struct bm_csi_drvdata *drvdata, void *__user args);
  47. int bm_csi_get_power(struct bm_csi_drvdata *drvdata, void *__user args);
  48. int bm_csi_en_power(struct bm_csi_drvdata *drvdata);
  49. int bm_csi_dis_power(struct bm_csi_drvdata *drvdata);
  50. int bm_csi_set_clock(struct bm_csi_drvdata *drvdata, void *__user args);
  51. int bm_csi_get_clock(struct bm_csi_drvdata *drvdata, void *__user args);
  52. int bm_csi_set_pixclk(struct bm_csi_drvdata *drvdata, void *__user args);
  53. int bm_csi_get_pixclk(struct bm_csi_drvdata *drvdata, void *__user args);
  54. int bm_csi_set_stream(struct bm_csi_drvdata *drvdata, void *__user args);
  55. int bm_csi_get_stream(struct bm_csi_drvdata *drvdata, void *__user args);
  56. int bm_csi_set_fmt(struct bm_csi_drvdata *drvdata, void *__user args);
  57. int bm_csi_get_fmt(struct bm_csi_drvdata *drvdata, void *__user args);
  58. int bm_csi_set_vc_select(struct bm_csi_drvdata *drvdata, void *__user args);
  59. int bm_csi_get_vc_select(struct bm_csi_drvdata *drvdata, void *__user args);
  60. int bm_csi_ipi_enable(struct bm_csi_drvdata *drvdata, void *__user args);
  61. int bm_csi_ipi_disable(struct bm_csi_drvdata *drvdata, void *__user args);
  62. int bm_csi_set_lane_cfg(struct bm_csi_drvdata *drvdata, void *__user args);
  63. int bm_csi_set_hsa(struct bm_csi_drvdata *drvdata, void *__user args);
  64. int bm_csi_set_hbp(struct bm_csi_drvdata *drvdata, void *__user args);
  65. int bm_csi_set_hsd(struct bm_csi_drvdata *drvdata, void *__user args);
  66. /*csi dphy*/
  67. int bm_csi_dphy_write_reg(struct bm_csi_drvdata *drvdata, void *__user args);
  68. int bm_csi_dphy_init(struct bm_csi_drvdata *drvdata, void *__user args);
  69. int bm_csi_dphy_uinit(struct bm_csi_drvdata *drvdata, void *__user args);
  70. int bm_csi_dphy_reset(struct bm_csi_drvdata *drvdata, void *__user args);
  71. void dw_csi_soc_reset(void);
  72. int dw_csi_probe(struct platform_device *pdev);
  73. int dw_csi_remove(struct platform_device *pdev);
  74. int dw_csi_set_pixclk(uint32_t freq_hz);
  75. int dw_csi_get_pixclk(uint32_t *freq_hz);
  76. #endif /* _BM_CSI_HW_H_*/