mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 10:26:10 +01:00 
			
		
		
		
	mmc: sdhci: Check and call config_dll callback functions
Check if the low level driver supports config_dll callback function and call it if it does. Call with dll disable before calling set_clock and with dll enable after it. Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma@amd.com>
This commit is contained in:
		
				
					committed by
					
						 Jaehoon Chung
						Jaehoon Chung
					
				
			
			
				
	
			
			
			
						parent
						
							14ef4c7be5
						
					
				
				
					commit
					6f5bb9913c
				
			| @@ -396,6 +396,14 @@ int sdhci_set_clock(struct mmc *mmc, unsigned int clock) | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	if (host->ops && host->ops->config_dll) { | ||||||
|  | 		ret = host->ops->config_dll(host, clock, false); | ||||||
|  | 		if (ret) { | ||||||
|  | 			printf("%s: Error while configuring dll\n", __func__); | ||||||
|  | 			return ret; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300) { | 	if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300) { | ||||||
| 		/* | 		/* | ||||||
| 		 * Check if the Host Controller supports Programmable Clock | 		 * Check if the Host Controller supports Programmable Clock | ||||||
| @@ -439,6 +447,14 @@ int sdhci_set_clock(struct mmc *mmc, unsigned int clock) | |||||||
| 	if (host->ops && host->ops->set_clock) | 	if (host->ops && host->ops->set_clock) | ||||||
| 		host->ops->set_clock(host, div); | 		host->ops->set_clock(host, div); | ||||||
|  |  | ||||||
|  | 	if (host->ops && host->ops->config_dll) { | ||||||
|  | 		ret = host->ops->config_dll(host, clock, true); | ||||||
|  | 		if (ret) { | ||||||
|  | 			printf("%s: Error while configuring dll\n", __func__); | ||||||
|  | 			return ret; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	clk |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT; | 	clk |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT; | ||||||
| 	clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN) | 	clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN) | ||||||
| 		<< SDHCI_DIVIDER_HI_SHIFT; | 		<< SDHCI_DIVIDER_HI_SHIFT; | ||||||
|   | |||||||
| @@ -272,6 +272,8 @@ struct sdhci_ops { | |||||||
| 	void	(*set_clock)(struct sdhci_host *host, u32 div); | 	void	(*set_clock)(struct sdhci_host *host, u32 div); | ||||||
| 	int (*platform_execute_tuning)(struct mmc *host, u8 opcode); | 	int (*platform_execute_tuning)(struct mmc *host, u8 opcode); | ||||||
| 	int (*set_delay)(struct sdhci_host *host); | 	int (*set_delay)(struct sdhci_host *host); | ||||||
|  | 	/* Callback function to set DLL clock configuration */ | ||||||
|  | 	int (*config_dll)(struct sdhci_host *host, u32 clock, bool enable); | ||||||
| 	int	(*deferred_probe)(struct sdhci_host *host); | 	int	(*deferred_probe)(struct sdhci_host *host); | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user